song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
	.byte	PATT
		.word	song042_3_1
song042_3_2:
	.byte		N01	, Ds7, v116
	.byte	W12
	.byte		N11
	.byte	W12
	.byte		N02
	.byte	W12
	.byte		N11
	.byte	W12
	.byte		N01
	.byte	W07
	.byte		N03
	.byte	W05
	.byte		N06
	.byte	W07
	.byte		N02
	.byte	W12
	.byte		N01
	.byte	W05
	.byte		N06
	.byte	W07
	.byte		N02
	.byte	W05
	.byte	PEND
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_2
	.byte	PATT
		.word	song042_3_1
	.byte	GOTO
		.word	song042_3_3
	.byte		N01	, Ds7, v116
	.byte	W12
	.byte		N11
	.byte	W12
	.byte		N02
	.byte	W12
	.byte		N11
	.byte	W12
	.byte		N01
	.byte	W07
	.byte		N03
	.byte	W05
	.byte		N06
	.byte	W07
	.byte		N02
	.byte	W12
	.byte		N01
	.byte	W05
	.byte		N06
	.byte		N08	, As7, v072
	.byte	W07
	.byte		N02	, Ds7, v116
	.byte	W02
	.byte	FINE

	@********************** Track  4 **********************@

	.global song042_4
song042_4:	@ 0x08286CE2
	.byte	KEYSH	, 0
	.byte	VOICE	, 46
	.byte	VOL	, v072
	.byte	PAN	, c_v-6
	.byte	W03
song042_4_1:
	.byte	W01
	.byte		N09	, En2, v112
	.byte


pecHttp2RouteActionRewrite? Rewrite;
        /// <summary>
        /// Target that traffic is routed to when a request matches the gateway route.
        /// </summary>
        public readonly Outputs.GatewayRouteSpecHttp2RouteActionTarget Target;

        [OutputConstructor]
        private GatewayRouteSpecHttp2RouteAction(
            Outputs.GatewayRouteSpecHttp2RouteActionRewrite? rewrite,

            Outputs.GatewayRouteSpecHttp2RouteActionTarget target)
        {
            Rewrite = rewrite;
            Target = target;
        }
    }
}


s-active svg {
  color: #0f5d92;
}
.top-bar .branding:hover svg .lense,
.top-bar .branding:active svg .lense,
.top-bar .branding:focus svg .lense,
.top-bar .branding.is-active svg .lense {
  -webkit-transform: scale(6);
  -ms-transform: scale(6);
  transform: scale(6);
}
.top-bar .branding:hover svg .inception,
.top-bar .branding:active svg .inception,
.top-bar .branding:focus svg .inception,
.top-bar .branding.is-active svg .inception {
  opacity: 1;
  -webkit-transform: scale(1);
  -ms-transform: scale(1);
  transform: scale(1);
}
.top-bar .btn, .top-bar .button-icon {
  margin: 0.75rem 0.25rem;
  padding: 0;
  height: 1.5rem;
  color: #444;
  font-size: 0.8rem;
  line-height: 1.5rem;
  border: 0;
  border-radius: 0.25rem;
  -webkit-box-shadow: 0 0 0 1px #ddd;
  box-shadow: 0 0 0 1px #ddd;
  background: none;
  -webkit-transition: all 0.15s cubic-bezier(0.25, 0.1, 0.25, 1);
  -o-transition: all 0.15s cubic-bezier(0.25, 0.1, 0.25, 1);
  transition: all 0.15s cubic-bezier(0.25, 0.1, 0.25, 1);
}
.top-bar .btn:hover,
.top-bar .button-icon:hover,
.top-bar .btn:focus,
.top-bar .button-icon:focus {
  color: #fff;
  background: #000;
  -webkit-box-shadow: 0 0 0 1px #000;
  box-shadow: 0 0 0 1px #000;
}
.top-bar .btn.is-active,
.top-bar .button-icon.is-active,
.top-bar .btn:active,
.top-bar .button-icon:active {
  color: #fff;
  background: #0f5d92;
  -webkit-box-shadow: 0 0 0 1px #0f5d92;
  box-shadow: 0 0 0 1px #0f5d92;
}
.top-bar .btn.icon-only,
.top-bar .button-icon.icon-only,
.top-bar .btn.button-icon-only,
.top-bar .button-icon.button-icon-only {
  width: 1.5rem;
}
.top-bar .btn.icon-only, .top-bar .button-icon.icon-only {
  padding: 0.25rem;
}
.top-bar .btn .icon, .top-bar .button-icon .icon {
  width: 1rem;
  height: 1rem;
}
.top-bar .btn .icon-info, .top-bar .button-icon .icon-info {
  width: 1.25rem;
  height: 1.25rem;
}
.top-bar nav li {
  line-height: inherit;
}
.top-bar nav li.separated-left::before {
  content: "";
  width: 2px;
  margin: 0.25rem 0.25rem;
  background: #eee;
}
.top-bar nav li > a,
.top-bar nav li > button,
.top-bar nav li button.is-primary-nav {
  margin: 0 0.125rem;
  padding: 0 0.125rem;
  font-size: 0.85em;
  position: relative;
}
.top-bar nav li > a::after,
.top-bar nav li > button


 0
	}
	var l int
	_ = l
	if m.Header != nil {
		l = m.Header.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	if m.FinishedPercentage != 0 {
		n += 1 + sovPdpb(uint64(m.FinishedPercentage))
	}
	if len(m.RegionsId) > 0 {
		l = 0
		for _, e := range m.RegionsId {
			l += sovPdpb(uint64(e))
		}
		n += 1 + sovPdpb(uint64(l)) + l
	}
	return n
}

func (m *SplitAndScatterRegionsRequest) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Header != nil {
		l = m.Header.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	if len(m.SplitKeys) > 0 {
		for _, b := range m.SplitKeys {
			l = len(b)
			n += 1 + l + sovPdpb(uint64(l))
		}
	}
	l = len(m.Group)
	if l > 0 {
		n += 1 + l + sovPdpb(uint64(l))
	}
	if m.RetryLimit != 0 {
		n += 1 + sovPdpb(uint64(m.RetryLimit))
	}
	return n
}

func (m *SplitAndScatterRegionsResponse) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Header != nil {
		l = m.Header.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	if m.SplitFinishedPercentage != 0 {
		n += 1 + sovPdpb(uint64(m.SplitFinishedPercentage))
	}
	if m.ScatterFinishedPercentage != 0 {
		n += 1 + sovPdpb(uint64(m.ScatterFinishedPercentage))
	}
	if len(m.RegionsId) > 0 {
		l = 0
		for _, e := range m.RegionsId {
			l += sovPdpb(uint64(e))
		}
		n += 1 + sovPdpb(uint64(l)) + l
	}
	return n
}

func (m *GetDCLocationInfoRequest) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Header != nil {
		l = m.Header.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	l = len(m.DcLocation)
	if l > 0 {
		n += 1 + l + sovPdpb(uint64(l))
	}
	return n
}

func (m *GetDCLocationInfoResponse) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.Header != nil {
		l = m.Header.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	if m.Suffix != 0 {
		n += 1 + sovPdpb(uint64(m.Suffix))
	}
	if m.MaxTs != nil {
		l = m.MaxTs.Size()
		n += 1 + l + sovPdpb(uint64(l))
	}
	return n
}

func (m *QueryStats) Size() (n int) {
	if m == nil {
		return 0
	}
	var l int
	_ = l
	if m.GC != 0 {
		n += 1 + sovPdpb(uint64(m.


的服务：

- 释放硬件资源，避免资源被过多的 pod 浪费。
- 按需提高/降低性能以达到服务级别协议。

## HPA 的工作原理

![HPA 架构](/img/horizontal-pod-autoscaler.jpg)

HPA 实现为一个控制循环，其周期由以下 `kube-controller-manager` 标志控制：

| 标志 | 默认 | 描述 |
---------|----------|----------|
| `--horizontal-pod-autoscaler-sync-period` | `30s` | HPA 在 deployment 中审核资源/自定义指标的频率。 |
| `--horizontal-pod-autoscaler-downscale-delay` | `5m0s` | 完成缩减操作后，HPA 必须等待多长时间才能启动另一个缩减操作。 |
| `--horizontal-pod-autoscaler-upscale-delay` | `3m0s` | 完成扩展操作后，HPA 必须等待多长时间才能启动另一个扩展操作。 |

有关 HPA 的完整文档，请参阅 [Kubernetes 文档](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)。

## Horizontal Pod Autoscaler API 对象

HPA 是 Kubernetes `autoscaling` API 组中的 API 资源。当前的稳定版本是 `autoscaling/v1`，它只支持对 CPU 自动扩缩。要获得内存和自定义指标的扩缩支持，请改用 beta 版本 `autoscaling/v2beta1`。

有关 HPA API 对象的更多信息，请参阅 [HPA GitHub 自述文件](https://github.com/kubernetes/design-proposals-archive/blob/main/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object)。
---
title: "四层和七层负载均衡"
description: "Kubernetes 支持四层负载均衡和七层负载均衡。了解对不同 deployment 的支持"
---

Kubernetes 支持四层负载均衡和七层负载均衡。

## 四层负载均衡器

四层负载均衡器（或外部负载均衡器）将流量转发到 Nodeport。四层负载均衡器支持转发 HTTP 和 TCP 流量。

通常情况下，四层负载均衡器由底层云提供商支持，因此，如果你在裸金属服务器和 vSphere 集群上部署 RKE 集群，则不支持四层负载均衡器。但是，单个[全局管理的 config-map](https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/) 可用于在 NGINX 或第三方 Ingress 上公开服务。

:::note

你可以使用非云负载均衡器（例如 [MetalLB](https://metallb.universe.tf/)）来部署集群。但是，该用例比云提供商支持的四层负载均衡器更高级，而且不可以在 Rancher 或 RKE 中配置。

:


lanes, outplane, k, stride=1, padding=0)
            layers.append(conv)
            self.inplanes = outplanes[i]
            num_layers += 1
        if self.input_size == 512:
            layers.append(nn.Conv2d(self.inplanes, 256, 4, padding=1))

        return nn.Sequential(*layers)

class L2Norm(nn.Module):

    def __init__(self, n_dims, scale=20., eps=1e-10):
        super(L2Norm, self).__init__()
        self.n_dims = n_dims
        self.weight = nn.Parameter(torch.Tensor(self.n_dims))
        self.eps = eps
        self.scale = scale

    def forward(self, x):
        # normalization layer convert to FP32 in FP16 training
        x_float = x.float()
        norm = x_float.pow(2).sum(1, keepdim=True).sqrt() + self.eps
        return (self.weight[None, :, None, None].float().expand_as(x_float) *
                x_float / norm).type_as(x)


h();
    mempool.addUnchecked(hash, entry.Fee(LOWFEE).Time(GetTime()).SpendsCoinbase(false).FromTx(tx));
    BOOST_CHECK_THROW(BlockAssembler(chainparams).CreateNewBlock(scriptPubKey), std::runtime_error);
    mempool.clear();

    // double spend txn pair in mempool, template creation fails
    tx.vin[0].prevout.hash = txFirst[0]->GetHash();
    tx.vin[0].scriptSig = CScript() << OP_1;
    tx.vout[0].nValue = BLOCKSUBSIDY-HIGHFEE;
    tx.vout[0].scriptPubKey = CScript() << OP_1;
    hash = tx.GetHash();
    mempool.addUnchecked(hash, entry.Fee(HIGHFEE).Time(GetTime()).SpendsCoinbase(true).FromTx(tx));
    tx.vout[0].scriptPubKey = CScript() << OP_2;
    hash = tx.GetHash();
    mempool.addUnchecked(hash, entry.Fee(HIGHFEE).Time(GetTime()).SpendsCoinbase(true).FromTx(tx));
    BOOST_CHECK_THROW(BlockAssembler(chainparams).CreateNewBlock(scriptPubKey), std::runtime_error);
    mempool.clear();

    // subsidy changing
    int nHeight = chainActive.Height();
    // Create an actual 209999-long block chain (without valid blocks).
    while (chainActive.Tip()->nHeight < 209999) {
        CBlockIndex* prev = chainActive.Tip();
        CBlockIndex* next = new CBlockIndex();
        next->phashBlock = new uint256(GetRandHash());
        pcoinsTip->SetBestBlock(next->GetBlockHash());
        next->pprev = prev;
        next->nHeight = prev->nHeight + 1;
        next->BuildSkip();
        chainActive.SetTip(next);
    }
    BOOST_CHECK(pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey));
    delete pblocktemplate;
    // Extend to a 210000-long block chain.
    while (chainActive.Tip()->nHeight < 210000) {
        CBlockIndex* prev = chainActive.Tip();
        CBlockIndex* next = new CBlockIndex();
        next->phashBlock = new uint256(GetRandHash());
        pcoinsTip->SetBestBlock(next->GetBlockHash());
        next->pprev = prev;
        next->nHeight = prev->nHeight + 1;
        next->BuildSkip();
        chainActive.SetTip(next);
    }
    BOOST_CHECK(pblocktemplate = BlockAssembler(chainparams).CreateNewBlock(scriptPubKey));
    delete pblocktemplate;
    // Delete the dummy blocks again.
    while (chainActive.Tip()->nHeight > nHeight) {
        CBlockIndex* del = chainActive.Tip();
        chainActive.SetTip(del->pprev);
        pcoinsTip->SetBestBlock(del->pprev->GetBlockHash());
        delete del->phashBlock;
        delete del;
    }

    // non-final txs in mempool
    SetMockTime(chainActive.Tip()->GetMedianTimePast()+1);
    int flags = LOCKTIME_VERIFY_SEQUENCE|LOCKTIME_MEDIAN_TIME_PAST;
    // height map
    std::vector<int> prevheights;

    // relative height locked
    tx.nVersion = 2;
    tx.vin.resize(1);
    prevheights.resize(1);
    tx.vin[0].prevout.hash = txFirst[0]->GetHash(); // only 1 transaction
    tx.vin[0].prevout.n = 0;
    tx.vin[0].scriptSig = CScript() << OP_1;
    tx.vin[0].


DB@@QAE_NAAV?$basic_string@GUci_wchar_traits@@V?$allocator@G@std@@@std@@@Z=_sub_6D52E60")
#pragma comment(linker, "/alternatename:_sub_6D52E60=__sub_6D52E60")
#pragma comment(linker, "/alternatename:?ReadCharacterName@PlayerDB@@QAEXPBDAAV?$basic_string@GUci_wchar_traits@@V?$allocator@G@std@@@std@@@Z=_sub_6D52FE0")
#pragma comment(linker, "/alternatename:_sub_6D52FE0=__sub_6D52FE0")
#pragma comment(linker, "/alternatename:?login@PlayerDB@@QAEEABUSLoginInfo@@I@Z=_sub_6D532F0")
#pragma comment(linker, "/alternatename:_sub_6D532F0=__sub_6D532F0")
#pragma comment(linker, "/alternatename:?traverse_active@PlayerDB@@QBEPAUPlayerData@@PAU2@@Z=_sub_6D53360")
#pragma comment(linker, "/alternatename:_sub_6D53360=__sub_6D53360")
#pragma comment(linker, "/alternatename:?load_user_data@PlayerDB@@AAEEABUSLoginInfo@@I@Z=_sub_6D533A0")
#pragma comment(linker, "/alternatename:_sub_6D533A0=__sub_6D533A0")
#pragma comment(linker, "/alternatename:?create_restart_file@PlayerDB@@QAE_NPBD@Z=_sub_6D536D0")
#pragma comment(linker, "/alternatename:_sub_6D536D0=__sub_6D536D0")
#pragma comment(linker, "/alternatename:_sub_6D53B60=__sub_6D53B60")
#pragma comment(linker, "/alternatename:_sub_6D53B90=__sub_6D53B90")
#pragma comment(linker, "/alternatename:?create_account@PlayerDB@@AAEHABUSLoginInfo@@@Z=_sub_6D53D50")
#pragma comment(linker, "/alternatename:_sub_6D53D50=__sub_6D53D50")
#pragma comment(linker, "/alternatename:?create_new_character@PlayerDB@@QAE_NABUSCreateCharacterInfo@@I@Z=_sub_6D53FD0")
#pragma comment(linker, "/alternatename:_sub_6D53FD0=__sub_6D53FD0")
#pragma comment(linker, "/alternatename:?cleanup@PlayerDB@@QAEXI@Z=_sub_6D54340")
#pragma comment(linker, "/alternatename:_sub_6D54340=__sub_6D54340")
#pragma comment(linker, "/alternatename:?logout@PlayerDB@@QAEXI@Z=_sub_6D543C0")
#pragma comment(linker, "/alternatename:_sub_6D543C0=__sub_6D543C0")
#pragma comment(linker, "/alternatename:?logout_all@PlayerDB@@QAEXXZ=_sub_6D54600")
#pragma comment(linker, "/alternatename:_sub_6D54600=__sub_6D54600")
#pragma comment(linker, "/alternatename:?GetActiveCharacterName@PlayerDB@@QBEPBGI@Z=_sub_6D54640")
#pragma comment(linker, "/alternatename:_sub_6D54640=__sub_6D54640")
#pragma comment(linker, "/alternatename:?CountPlayersInSystem@PlayerDB@@QAEIH@Z=_sub_6D546B0")
#pragma comment(linker, "/alternatename:_sub_6D546B0=__sub_6D546B0")
#pragma comment(linke


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*                                                                           */
/*                  This file is part of the program and library             */
/*         SCIP --- Solving Constraint Integer Programs                      */
/*                                                                           */
/*  Copyright 2002-2022 Zuse Institute Berlin                                */
/*                                                                           */
/*  Licensed under the Apache License, Version 2.0 (the "License");          */
/*  you may not use this file except in compliance with the License.         */
/*  You may obtain a copy of the License at                                  */
/*                                                                           */
/*      http://www.apache.org/licenses/LICENSE-2.0                           */
/*                                                                           */
/*  Unless required by applicable law or agreed to in writing, software      */
/*  distributed under the License is distributed on an "AS IS" BASIS,        */
/*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
/*  See the License for the specific language governing permissions and      */
/*  limitations under the License.                                           */
/*                                                                           */
/*  You should have received a copy of the Apache-2.0 license                */
/*  along with SCIP; see the file LICENSE. If not visit scipopt.org.         */
/*                                                                           */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/**@file   heur_distributiondiving.h
 * @ingroup PRIMALHEURISTICS
 * @brief Diving heuristic that chooses fixings w.r.t. changes in the solution density after Pryor and Chinneck.
 * @author Gregor Hendel
 *
 * @see branch_distribution.h for further explanations of probability based branching schemes and references.
 */

/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/

#ifndef __SCIP_HEUR_DISTRIBUTIONDIVING_H__
#define __SCIP_HEUR_DISTRIBUTIONDIVING_H__

#include "scip/def.h"
#include "scip/type_retcode.h"
#include "scip/type_scip.h"

#ifdef __cplusplus
extern "C" {
#endif

/** creates the distributiondiving heuristic and includes it in SCIP
 *
 *  @ingroup PrimalHeuristicIncludes
 */
SCIP_EXPORT
SCIP_RETCODE SCIPincludeHeurDistributiondiving(
   SCIP*                 scip                /**< SCIP data structure */
   );

#ifdef __cplusplus
}
#endif

#endif


="example">crop=in_w/2:in_h/2:in_w/2:in_h/2

 Crop height for getting Greek harmony:

crop=in_w:1/PHI*in_w

 Apply trembling effect:

crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)

 Apply erratic camera effect depending on timestamp:

crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"

 Set x depending on the value of y:

crop=in_w/2:in_h/2:y:10+10*sin(n/10)

37.17 cropdetect

Auto-detect the crop size.

It calculates the necessary cropping parameters and prints the
recommended parameters via the logging system. The detected dimensions
correspond to the non-black area of the input video.

It accepts the following parameters:

<samp>limit</samp>

Set higher black value threshold, which can be optionally specified
from nothing (0) to everything (255 for 8bit based formats). An intensity
value greater to the set value is considered non-black. It defaults to 24.
You can also specify a value between 0.0 and 1.0 which will be scaled depending
on the bitdepth of the pixel format.

<samp>round</samp>

The value which the width/height should be divisible by. It defaults to
16. The offset is automatically adjusted to center the video. Use 2 to
get only even dimensions (needed for 4:2:2 video). 16 is best when
encoding to most video codecs.

<samp>reset_count, reset</samp>

Set the counter that determines after how many frames cropdetect will
reset the previously detected largest video area and start over to
detect the current optimal crop area. Default value is 0.

This can be useful when channel logos distort the video area. 0
indicates ’never reset’, and returns the largest area encountered during
playback.

37.18 curves

Apply color adjustments using curves.

This filter is similar to the Adobe Photoshop and GIMP curves tools. Each
component (red, green and blue) has its values defined by <var>N</var> key points
tied from each other using a smooth curve. The x-axis represents the pixel
values from the input frame, and the y-axis the new pixel values to be set for
the output frame.

By default, a component curve is defined by the two points <var>(0;0)</var> and
<var>(1;1)</var>. This creates a straight line where each original pix


dColor = currentColor;
    }

    private static string FormatMethodName(MethodInfo method)
    {
        var methodName = method.GetCustomAttribute<TestAttribute>() is TestAttribute test ? test.Name : method.Name;
        if (!methodName.Contains('\n'))
        {
            return methodName;
        }

        var lines = methodName.Split('\n').Select(line => line.Trim());
        var first = lines.Take(1).ToList();
        var rest = lines.Skip(1).Select(l => $"{Environment.NewLine}     {l}").ToList();

        return string.Join(null, first.Concat(rest));
    }

    public void WriteSummary(int passed, List<(MethodInfo method, Exception exception, TimeSpan time)> failures, TimeSpan duration)
    {
        WriteLine();
        WriteLine();
        if (failures.Count > 0)
        {
            WriteLine($"There were {failures.Count} failures:");
        }
        failures.ForEach(t => { WriteTestFailure(t.method, t.exception, t.time); WriteLine(); });
        WriteLine();
        WriteLine($"Test run finished: Total: {passed + failures.Count} Passed: {passed} Failed: {failures.Count} Duration: {(int)duration.TotalMilliseconds} ms");
    }
}


destination encoding. Must be "WCHAR_T".
 *
 * @return the zero terminated wchar_t string (to be freed with CPLFree()) or
 * NULL on error.
 */

wchar_t *CPLRecodeToWCharIconv(const char *pszSource,
                               const char *pszSrcEncoding,
                               const char *pszDstEncoding)

{
    if (strcmp(pszDstEncoding, "WCHAR_T") != 0)
    {
        CPLError(CE_Failure, CPLE_AppDefined,
                 "Stub recoding implementation does not support "
                 "CPLRecodeToWCharIconv(...,%s,%s)",
                 pszSrcEncoding, pszDstEncoding);
        return nullptr;
    }

    // Using double static_cast<> makes CodeQL cpp/incorrect-string-type-conversion
    // check happy...
    return static_cast<wchar_t *>(static_cast<void *>(
        CPLRecodeIconv(pszSource, pszSrcEncoding, pszDstEncoding)));
}

#endif /* CPL_RECODE_ICONV */
/**********************************************************************
 *
 * Project:  CPL - Common Portability Library
 * Purpose:  CPL worker thread pool
 * Author:   Even Rouault, <even dot rouault at spatialys dot com>
 *
 **********************************************************************
 * Copyright (c) 2015, Even Rouault, <even dot rouault at spatialys dot com>
 *
 * SPDX-License-Identifier: MIT
 ****************************************************************************/

#include "cpl_port.h"
#include "cpl_worker_thread_pool.h"

#include <cstddef>
#include <memory>

#include "cpl_conv.h"
#include "cpl_error.h"
#include "cpl_vsi.h"

static thread_local CPLWorkerThreadPool *threadLocalCurrentThreadPool = nullptr;

/************************************************************************/
/*                         CPLWorkerThreadPool()                        */
/************************************************************************/

/** Instantiate a new pool of worker threads.
 *
 * The pool is in an uninitialized state after this call. The Setup() method
 * must be called.
 */
CPLWorkerThreadPool::CPLWorkerThreadPool() : jobQueue{}
{
}

/** Instantiate a new pool of worker threads.
 *
 * \param nThreads  Number of threads in the pool.
 */
CPLWorkerThreadPool::CPLWorkerThreadPool(int nThreads) : jobQueue{}
{
    Setup(nThreads, nullptr, nullptr);
}

/************************************************************************/
/*                          ~CPLWorkerThreadPool()                      */
/************************************************************************/

/** Destroys a pool of worker threads.
 *
 * Any still pending job will be completed before the destructor returns.
 */
CPLWorkerThreadPool::~CPLWorkerThreadPool()
{
    WaitCompletion();

    {
        std::lock_guard<std::mutex> oGuard(m_mutex);
        eState = CPLWTS_STOP;
    }

    for (auto &wt : aWT)
    {
        {
            std::lock_guard<std::mutex> oGuard(wt->m_mutex);
            wt->m_cv.notify_one();
        }
        CPLJoinThread(wt->hThread);
    }

    CPLListDestroy(psWaitingWorkerThreadsList);
}

/************************************************************************/
/*                        GetThreadCount()                              */
/************************************************************************/

int CPLWorkerThreadPool::GetThreadCount() const
{
    std::unique_lock<std::mutex> oGuard(m_mutex);
    return m_nMaxThreads;
}

/************************************************************************/
/*                       WorkerThreadFunction()                         */
/************************************************************************/

void CPLWorkerThreadPool::WorkerThreadFunction(void *user_data)
{
    CPLWorkerThread *psWT = static_cast<CPLWorkerThread *>(user_data);
    CPLWorkerThreadPool *poTP = psWT->poTP;

    threadLocalCurrentThreadPool = poTP;

    if (psWT


canvas.drawPath((block.path), _blockPaint);
      canvas.drawRect(
        Rect.fromLTWH(
          block.uiRange1.start,
          painterRect.top,
          max(block.uiRange1.size, 1.0),
          _chrHeight,
        ),
        _blockPaint,
      );
      canvas.drawRect(
        Rect.fromLTWH(
          block.uiRange2.start,
          painterRect.bottom - _chrHeight,
          max(block.uiRange2.size, 1.0),
          _chrHeight,
        ),
        _blockPaint,
      );
    }
    checkSelectedItem(canvas);
  }

  checkSelectedItem(Canvas canvas) {
    //logger.d('selected item ${selectedItem?.hashCode}');
    if (null == selectedItem) return;
    InteractiveItem _selected = selectedItem;
    // Path _path = _selected.getPath(painterRect.top + _chrHeight, painterRect.bottom - _chrHeight);
    _selectedPaint
      ..color = styleConfig.selectedColor
      ..style = _selected.needClose ? PaintingStyle.fill : PaintingStyle.stroke;
    canvas.drawPath(
      _selected.path,
      _selectedPaint,
    );
    canvas.drawRect(
      Rect.fromLTRB(
        _selected.uiRange1.start,
        painterRect.top,
        _selected.uiRange1.end,
        painterRect.top + _chrHeight,
      ),
      _selectedPaint,
    );

    canvas.drawRect(
      Rect.fromLTRB(
        _selected.uiRange2.start,
        painterRect.bottom - _chrHeight,
        _selected.uiRange2.end,
        painterRect.bottom,
      ),
      _selectedPaint,
    );
    Rect _bounds = _selected.path.getBounds();
    var toolTip = 'name  : ${_selected.name ?? ''}\nLocus1: ${chr1}:${_selected.range1.print('-')}\nLocus2: ${chr2}:${_selected.range2.print('-')}\nscore : ${_selected.value}';
    drawTooltip(canvas, toolTip, _bounds.center, _bgPaint);
  }

  @override
  findHitItem(Offset position) {
    // RangeFeature blockFeature = trackData?.features?.firstWhere(
    //   (feature) => (feature.groupRect ?? feature.rect).contains(position),
    //   orElse: () => null,
    // );
    // //print('find item ${track.trackName} $item');
    // hitItem = blockFeature;
    // return hitItem;

    Iterable<InteractiveItem> finds = trackData.data!.where(
      (b) => b.areaPath.contains(position),
    );
    if (finds.length == 0) {
      hitItem = null;
      return hitItem;
    }
    InteractiveItem? find = finds.minBy((f) {
      var intersection = Path.combine(
          PathOperation.intersect,
          f.areaPath,
          Path()
            ..addRect(
              Rect.fromCenter(
                center: Offset(position.dx, painterRect.center.dy),
                width: 2,
                height: painterRect.height,
              ),
            ));
      // if (intersection.computeMetrics().any((PathMetric metric) => metric.length > 0)) {
      //
      // }
      return intersection.getBounds().height;
    });
    hitItem = find;
    return hitItem;
  }

  @override
  bool hitTest(Offset position) {
    var item = findHitItem(position);
    if (item != null) return true;
    return super.hitTest(position);
  }

  @override
  bool painterChanged(AbstractTrackPainter painter) {
    HicRelationPainter _painter = painter as HicRelationPainter;
    bool changed = super.painterChanged(painter) || //
        _painter.visibleRange != visibleRange ||
        _painter.visibleRange2 != visibleRange2 ||


] = useState(initTabs);

    const moveTabNode = (dragIndex: number, hoverIndex: number) =>
        setTabs(prevTabs => {
            const newCards = [...prevTabs];
            newCards.splice(hoverIndex, 0, ...newCards.splice(dragIndex, 1));

            return newCards;
        });

    return (
        <DndProvider backend={HTML5Backend}>
            <Tabs>
                {tabs.map((tabPane, index) => (
                    <TabPane
                        key={tabPane.key}
                        title={
                            <WrapTabNode key={index} index={index} moveTabNode={moveTabNode}>
                                {tabPane.title}
                            </WrapTabNode>
                        }
                    >
                        {tabPane.children}
                    </TabPane>
                ))}
            </Tabs>
        </DndProvider>
    );
};

export default App;
```
---
order: 16
title:
  zh-CN: 自定义下拉菜单的展示
  en-US: DropdownRender
---

## zh-CN

使用 `dropdownRender` 对下拉菜单进行扩展。

## en-US

Customize the popup content by `dropdownRender`

```js
import { Cascader, Divider, Space } from '@arco-design/web-react';
const options = [
  {
    value: 'beijing',
    label: 'Beijing',
    children: [
      {
        value: 'Beijing',
        label: 'Beijing',
        children: [
          {
            value: 'chaoyang',
            label: 'Chaoyang',
            children: [
              {
                value: 'datunli',
                label: 'Datunli',
              },
            ],
          },
        ],
      },
    ],
  },
  {
    value: 'shanghai',
    label: 'Shanghai',
    children: [
      {
        value: 'shanghaishi',
        label: 'Shanghai',
        children: [
          {
            value: 'huangpu',
            label: 'Huangpu',
          },
        ],
      },
    ],
  },
];

const App = () => {
  return (
    <Space size="large">
      <Cascader
        placeholder="Please select ..."
        style={{ width: 300 }}
        options={options}
        dropdownRender={(menu) => {
          return (

              {menu}
              <Divider style={{ margin: 0 }} />

                The footer content

          );
        }}
      />
      <Cascader
        style={{ width: 300 }}
        dropdownColumnRender={(menu, level) => {
          return (

                {menu}

              <Divider style={{ margin: 0 }}/>

                The footer content(Level {level})

          );
        }}
        options={options}
      />
    </Space>
  );
};

export default App;
```
# Troubleshooting for [ArcoMage HD](https://arcomage.github.io/)

## Browser Support

The game officially supports all individual versions of actively maintained desktop and mobile browsers with more than 0.2% global market share (`>0.2% and not dead`). Click "[supported browser list](https://browsersl.ist/#q=%3E0.2%25+and+not+dead)" and check if your browser is supported. Upgrade


理的内存大小                      |
| Framework Heap                        | MB   | 框架堆内存大小                           |
| Task Heap                             | MB   | 任务堆内存大小                           |
| Framework Off-Heap                    | MB   | 框架堆外内存大小                          |
| memoryConfigurationTaskOffHeap        | Byte | 任务堆外内存配置                          |
| Network                               | MB   | 网络内存配置                            |
| Managed Memory                        | MB   | 托管内存配置                            |
| JVM Metaspace                         | MB   | JVM元空间大小                          |
| JVM Overhead                          | MB   | JVM开销                             |
| memoryConfigurationTotalFlinkMemory   | Byte | Flink总内存配置                        |
| memoryConfigurationTotalProcessMemory | Byte | 进程总内存配置                           |

#### TaskManager Metrics

|               指标名称                | 指标单位 |        指标帮助描述        |
|-----------------------------------|------|----------------------|
| Status.Shuffle.Netty.TotalMemory  | MB   | Netty Shuffle 使用的总内存 |
| Status.Flink.Memory.Managed.Used  | MB   | Flink 管理的已用内存        |
| Status.JVM.Memory.Metaspace.Used  | MB   | JVM 元空间已使用的内存        |
| Status.JVM.Memory.Metaspace.Max   | MB   | JVM 元空间的最大内存         |
| Status.JVM.Memory.Heap.Used       | MB   | JVM 堆内存已使用的内存        |
| Status.JVM.Memory.Heap.Max        | MB   | JVM 堆内存的最大容量         |
| Status.Flink.Memory.Managed.Total | MB   | Flink 管理的内存总量        |
| Status.Shuffle.Netty.UsedMemory   | MB   | Netty Shuffle 使用的内存  |
---
id: presto
title: 监控：PrestoDB 数据库
sidebar_label: PrestoDB 数据库
keywords: [ 开源监控系统, 开源数据库监控, Presto数据库监控 ]
---

> 对PrestoDB Atlas 的通用性能指标进行采集监控。

### 配置参数

|  参数名称  |                        参数帮助描述                        |
|--------|------------------------------------------------------|
| 目标Host | 被监控的对端IPV4，IPV6或域名。注意⚠不带协议头(eg: https://, http://)。 |
| 任务名称   | 标识此监控的名称，名称需要保证唯一性。                                  |
| 端口     | 被监控的平台端口。                                            |
| 连接超时时间 | 设置连接PrestoDB未响应数据时的超时时间，单位ms毫秒，默认6000毫秒。             |
| 采集间隔   | 监控周期性采集数据间隔时间，单位秒，可设置的最小间隔为30秒。                      |
| 绑定标签   | 用于对监控资源进行分类管理。                                       |
| 描述备注   | 更多标识和描述此监控的备注信息，用户可以在这里备注信息。


<?xml version="1.0" encoding="UTF-8"?>
<some_type_t a="b" b="c">
	<price>1.23</price>
  <?myapp instruction?>
	<price>3.25</price>
  <![CDATA[ node2</p>]]>
	<price>9.57</price>
	<description>Some description </description>
	<child>
		<key1>10</key1>
		<key2>20</key2>
	</child>
	<hasdescription>true</hasdescription>
	<c>X</c>
	<d_v>3.14159</d_v>
	<name>张三</name>
	<addr>123 Main St</addr>
	<status>1</status>
</some_type_t>
)";
  some_type_t st;
  iguana::from_xml(st, str);
  validator_some_type(st);

  {
    std::string ss;
    iguana::to_xml(st, ss);

    some_type_t st1;
    iguana::from_xml(st1, ss);
    validator_some_type(st1);
  }
  {
    std::string ss;
    iguana::to_xml<true>(st, ss);
    std::cout << ss;
    some_type_t st1;
    iguana::from_xml(st1, ss);
    validator_some_type(st1);
  }
}

struct book_t {
  std::string title;
  std::string author;
};
YLT_REFL(book_t, title, author);
struct library {
  iguana::xml_attr_t<book_t> book;
};
YLT_REFL(library, book);
TEST_CASE("test library with attr") {
  auto validator = [](library lib) {
    CHECK(lib.book.attr()["id"] == "1234");
    CHECK(lib.book.attr()["language"] == "en");
    CHECK(lib.book.attr()["edition"] == "1");
    CHECK(lib.book.value().title == "Harry Potter and the Philosopher's Stone");
    CHECK(lib.book.value().author == "J.K. Rowling");
  };
  std::string str = R"(
  <?xml version="1.0" encoding="UTF-8"?>
  <library name="UESTC library">
    <book id="1234" language="en" edition="1">
      <title>Harry Potter and the Philosopher's Stone</title>
      <author>J.K. Rowling</author>
    </book>
  </library>
)";
  {
    library lib;
    iguana::from_xml(lib, str);
    validator(lib);
  }
  {
    iguana::xml_attr_t<library> lib;
    iguana::from_xml(lib, str);
    CHECK(lib.attr()["name"] == "UESTC library");
    validator(lib.value());

    {
      std::string ss;
      iguana::to_xml(lib, ss);
      iguana::xml_attr_t<library> lib1;
      iguana::from_xml(lib1, ss);
      validator(lib1.value());
      std::cout << ss << std::endl;
    }
    {
      std::string ss;
      iguana::to_xml<true>(lib, ss);
      iguana::xml_attr_t<library> lib1;
      iguana::from_xml(lib1, ss);
      validator(lib1.value());
      std::cout << ss << std::endl;
    }
  }
}

struct package_t {
  iguana::xml_attr_t<std::optional<std::string_view>> version;
  iguana::xml_attr_t<std::string_view> changelog;
};
YLT_REFL(package_t, version, changelog);
TEST_CASE("test example package") {
  auto validator = [](iguana::xml_attr_t<package_t> packa


0x2A,0x2A,0x29,0x28
	.byte 0x26,0x25,0x23,0x21,0x1F,0x1E,0x1D,0x1C,0x1C,0x1C,0x1C,0x1C,0x1D,0x1E,0x1E,0x1F
	.byte 0x20,0x22,0x23,0x25,0x26,0x27,0x28,0x2A,0x2A,0x2A,0x2B,0x2C,0x2C,0x2C,0x2A,0x2A
	.byte 0x28,0x27,0x27,0x25,0x23,0x21,0x1F,0x1E,0x1B,0x19,0x19,0x17,0x17,0x15,0x15,0x13
	.byte 0x11,0x11,0x13,0x13,0x14,0x14,0x16,0x18,0x19,0x1A,0x1B,0x1B,0x1B,0x1D,0x1E,0x1F
	.byte 0x20,0x1F,0x1F,0x1E,0x1C,0x1B,0x1A,0x19,0x18,0x17,0x16,0x13,0x12,0x0F,0x0F,0x0D
	.byte 0x0B,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x09,0x0A,0x0B
	.byte 0x0D,0x0F,0x0F,0x0F,0x11,0x12,0x12,0x12,0x10,0x10,0x10,0x10,0x0F,0x0E,0x0B,0x08

	.byte 0x07,0x05,0x03,0x01,0xFF,0xFE,0xFC,0xFB,0xF9,0xF8,0xF7,0xF7,0xF8,0xF6,0xF9,0xFC
	.byte 0xF8,0xF8,0xF5,0xF9,0xF8,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFE,0xFE
	.byte 0xFE,0xFC,0xFC,0xFB,0xFA,0xF8,0xF6,0xF4,0xF2,0xF0,0xEE,0xEC,0xE9,0xE7,0xE5,0xE4
	.byte 0xE3,0xE1,0xDF,0xDF,0xDE,0xE0,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEF,0xF2,0xF4
	.byte 0xF7,0xF8,0xF8,0xF8,0xF7,0xF6,0xF6,0xF4,0xF2,0xF0,0xEE,0xEC,0xEA,0xE8,0xE5,0xE1
	.byte 0xE1,0xE0,0xDE,0xDF,0xDF,0xDE,0xDF,0xDF,0xE0,0xDF,0xDF,0xDF,0xDE,0xDE,0xDE,0xDE
	.byte 0xDE,0xDE,0xDF,0xDF,0xE1,0xE1,0xE1,0xE1,0xE1,0xE4,0xE5,0xE7,0xE6,0xE6,0xE7,0xE7
	.byte 0xE8,0xE7,


(b[i]);
  assert(a[b[i]] == r)
  ii = math.max(ii,i)
  i = i+1
end

assert(ii == 299)

function xxxx (x) coroutine.yield('b'); return ii+x end

assert(xxxx(10) == 309)

a = nil
b = nil
a1 = nil

print("tables with table i


 (w.config.grid.show) {
          // grid is drawn after xaxis and yaxis are drawn
          elgrid = this.renderGrid();
          gl.dom.elGraphical.add(elgrid.el);
          this.drawGridArea(elgrid.el);
        } else {
          var elgridArea = this.drawGridArea();
          gl.dom.elGraphical.add(elgridArea);
        }

        if (elgrid !== null) {
          xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth);
        }

        yaxis.setYAxisTextAlignments();
      }
    } // This mask will clip off overflowing graphics from the drawable area

  }, {
    key: "createGridMask",
    value: function createGridMask() {
      var w = this.w;
      var gl = w.globals;
      var graphics = new Graphics(this.ctx);
      var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width;

      if (Array.isArray(w.config.stroke.width)) {
        var strokeMaxSize = 0;
        w.config.stroke.width.forEach(function (m) {
          strokeMaxSize = Math.max(strokeMaxSize, m);
        });
        strokeSize = strokeMaxSize;
      }

      gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath');
      gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid));
      gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath');
      gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid));
      gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff');
      var coreUtils = new CoreUtils(this);
      coreUtils.getLargestMarkerSize();
      var markerSize = w.globals.markers.largestSize + 1;
      gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff');
      gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node);
      gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node);
      var defs = gl.dom.baseEl.querySelector('defs');
      defs.appendChild(gl.dom.elGridRectMask);
      defs.appendChild(gl.dom.elGridRectMarkerMask);
    } // actual grid rendering

  }, {
    key: "renderGrid",
    value: function renderGrid() {
      var w = this.w;
      var graphics = new Graphics(this.ctx);
      var strokeDashArray = w.config.grid.strokeDashArray;
      var elg = graphics.group({
        class: 'apexcharts-grid'
      });
      var elgridLinesH = graphics.group({
        class: 'apexcharts-gridlines-horizontal'
      });
      var elgridLinesV = graphics.group({
        class: 'apexcharts-gridlines-vertical'
      });
      elg.add(elgridLinesH);
      elg.add(elgridLinesV);
      var tickAmount = 8;

      for (var i = 0; i < w.globals.series.length; i++) {
        if (typeof w.globals.yAxisScale[i] !== 'undefined') {
          tickAmount = w.globals.yAxisScale[i].result.length - 1;
        }

        if (tickAmount > 2) break;
      }

      var xCount;

      if (!w.globals.isBarHorizontal) {
        xCount = this.xaxisLabels.length; // draw vertical lines

        if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {
          var x1 = w.globals.padHorizontal;
          var y1


人发现户外广告设施和招牌违法设置的，有权向城市管理行政主管部门举报和投诉。城市管理行政主管部门应当自接到举报、投诉之日起五个工作日内进行核查、处理和反馈。

## 第五章 法律责任

第三十条 对违反本条例规定的行为，法律、行政法规已经规定法律责任的，适用其规定。

第三十一条 违反本条例第十一条规定，在禁止设置的区域或位置设置户外广告设施的，依照相关法律、法规规定予以处罚；法律、法规未规定的，依照本条例第三十二条的规定予以处罚。

第三十二条 违反本条例第十四条、第十五条规定，未经许可擅自设置大型户外广告设施或临时大型户外广告设施的，由城市管理行政主管部门或综合行政执法部门责令限期清理、拆除或者采取其他补救措施，并处五千元以上五万元以下的罚款。

第三十三条 违反本条例第十七条第一款规定，设置人未按许可证载明事项设置大型户外广告设施或临时大型户外广告设施的，由城市管理行政主管部门或综合行政执法部门责令限期改正；逾期不改正的，处一千元以上一万元以下的罚款。

违反本条例第十七条第三款规定，涂改、租借、倒卖户外广告设施设置许可证或者户外广告设施临时设置许可证的，由许可机关依法吊销户外广告设施设置许可证或者户外广告设施临时设置许可证，并由所在地城市管理行政主管部门或综合行政执法部门处一千元以上一万元以下的罚款；伪造、变造户外广告设施设置许可证或者户外广告设施临时设置许可证的，依照《中华人民共和国治安管理处罚法》有关处罚规定执行。

第三十四条 违反本条例第十八条规定，设置非大型户外广告设施和招牌不符合专项规划、实施方案、技术规范的，由城市管理行政主管部门或综合行政执法部门责令限期改正；逾期不改正的，处五百元以上五千元以下的罚款。

第三十五条 违反本条例第十九条规定，在建（构）筑


;" (click)="editRole(row)">
         {{'roles.management.Details' | translate}}

    }
  </ng-template>

  <ng-template #editorModal let-modal>

      @if (canManageRoles) {

          {{editingRoleName ? ('roles.management.EditRole' | translate:editingRoleName) : ('roles.management.NewRole' | translate)}}

      }
      @else {

           {{'roles.management.RoleDetails' | translate:editingRoleName}}

      }
      <button type="button" class="btn-close fs-sm" title="Close" (click)="modal.close()" tabindex="-1"></button>

      <app-role-editor #roleEditor (afterOnInit)="setRoleEditorComponent($event)" />

  </ng-template>

U+0023

U+0023-20e3

U+002a

U+002a-20e3

U+0030

U+0030-20e3

U+0031 <img src="https


 needed. */
  public onRouteChangedObservable = new Observable<Route>();

  /** The current Spotify token. */
  get token() {
    return this._token;
  }

  /** @private The redirect_uri used by Spotify. */
  private get callback() {
    const { origin } = new URL(window.location.href);
    const callback_url = `${origin}/callback.html`;
    return callback_url;
  }

  /**
   * Creates a new Router.
   *
   * Adds a listener for messages, then dispatches a new route based on whether
   * or not a valid access token is available.
   */
  constructor() {
    // Wrapper to enable removing the event listener.
    this._listener = this.onMessageReceived.bind(this);

    this.test(this.token).then((ret: boolean) => {
      if (ret) {
        const expiresStr = localStorage.getItem(SPOTIFY_EXPIRES_AT_KEY) || "";
        const expiresAt = parseInt(expiresStr, 10);
        if (expiresAt !== NaN && expiresAt > 0 && this._refreshToken) {
          const ms = expiresAt - Date.now();
          this.startRefreshing(ms, this._refreshToken);
        }

        this.onTokenChangedObservable.notifyObservers(this.token);
        this.onRouteChangedObservable.notifyObservers(Route.Home);
      } else {
        window.addEventListener("message", this._listener);
        this.onRouteChangedObservable.notifyObservers(Route.Login);
      }
    });
  }

  protected onTest(ret: boolean) {
    if (ret) {
      const expiresStr = localStorage.getItem(SPOTIFY_EXPIRES_AT_KEY) || "";
      const expiresAt = parseInt(expiresStr, 10);
      if (expiresAt !== NaN && this._refreshToken) {
        const ms = expiresAt - Date.now();
        this.startRefreshing(ms, this._refreshToken);
      }

      this.onTokenChangedObservable.notifyObservers(this.token);
      this.onRouteChangedObservable.notifyObservers(Route.Home);
    } else {
      window.addEventListener("message", this._listener);
      this.onRouteChangedObservable.notifyObservers(Route.Login);
    }
  };

  private onMessageReceived(evt: MessageEvent) {
    if (!evt.data || typeof evt.data !== 'string') {
      return;
    }
    const { type, data } = JSON.parse(evt.data);
    if (this._authWindow) {
      this._authWindow.close();
    }

    window.removeEventListener('message', this._listener);
    if (!type || type !== 'success') {
      // TODO: switch(data) {} for a more human-useful error.
      //       might do this in callback.html
      this.onErrorObservable.notifyObservers(`Error authorizing Spotify: ${data}`);
    } else {
      this.authenticate(data).then(() => {
        this.onTokenChangedObservable.notifyObservers(this._token);
        this.onRouteChangedObservable.notifyObservers(Route.Home);
      });
    }
  }

  /**
   * @private Invoked when authentication was successful.
   *
   * @param accessToken Token to use with the Spotify API.
   * @param refreshToken Token to use when requesting a new token.
   * @param expiresAt Date at which the current access token will expire.
   */
  private onAuthenticated(accessToken: string, refreshToken: string, expiresAt: number) {
    this._token = accessToken;
    this._refreshToken = refreshToken;

    if (!accessToken && !refreshToken) {
      this.onErrorObservable.notifyObservers("Invalid Spotify tokens were received");
      return;
    }

    const ms = expiresAt


es {
        pandoc.Image({}, 'https://github.com/images/icons/emoji/unicode/2757.png', 'Important', iconSize),
        pandoc.Strong { pandoc.Str "\tImportant" }
      },
      para.content
    }
  elseif firstWord == '[!CAUTION]' then
    -- Render the GitHub alert [!CAUTION] with the 🛑 icon.
    table.remove(para.content, 1)

    return pandoc.LineBlock {
      pandoc.Inlines {
        pandoc.Image({}, 'https://github.com/images/icons/emoji/unicode/1f6d1.png', 'Caution', iconSize),
        pandoc.Strong { pandoc.Str "\tCaution" }
      },
      para.content
    }
  end
end

if FORMAT:match 'latex' then
  function Image(img)
    -- Apply image alignment.
    if img.attributes.align == "left" or img.attributes.align == "right" then
      -- The option is either 'l' or 'r'.
      local floatfltOption = img.attributes.align:sub(1, 1)

      -- Get the actual image width.
      local imageWidth = img.attributes.width

      -- Wrap the image in a floatingfigure environment.
      return {
        pandoc.RawInline('latex', '\\begin{floatingfigure}[' .. floatfltOption .. ']{' .. imageWidth .. '}'),
        img,
        pandoc.RawInline('latex', '\\end{floatingfigure}')
      }
    end
  end

  function RawInline (el)
    -- Transform inline HTML `<br>` elements into format-indepentent line breaks.
    if el.format:match '^html' and el.text:match '%<br ?/?%>' then
      return pandoc.LineBreak()
    end
  end
end


		4102,
			4103,
			4104,
			4105,
			4106,
			4107,
			4109,
			4110,
			4112,
			4113,
			4114,
			4201,
			4202,
			4203,
			4301,
			4302,
			4303,
			4304,
			4305,
			4306,
			4307
		}
	},
	{
		Cfg_1 = 5,
		name = "메탈 블러드 지휘소",
		desc = "메탈 블러드 지휘소 풍 기자재 세트. 메탈 블러드의 기술은 세계 제에이이이일!",
		deblocking = 30,
		new = 0,
		hot = 0,
		Cfg_2 = 8,
		is_view = 1,
		discount = 0,
		id = 5,
		icon = "tiexuethemeicon",
		comfortable = 67,
		discount_time = "",
		ids = {
			5001,
			5002,
			5101,
			5102,
			5104,
			5105,
			5106,
			5107,
			5108,
			5109,
			5111,
			5112,
			5113,
			5114,
			5201,
			5202,
			5203,
			5301,
			5302,
			5303,
			5304,
			5305,
			5306,
			5307
		}
	},
	[8] = {
		Cfg_1 = 5,
		name = "메탈 블러드 와이너리",
		desc = "이왕 왔으니까, 한잔하고 가는 게 어때.",
		deblocking = 1,
		new = 0,
		hot = 0,
		Cfg_2 = 8,
		is_view = 1,
		discount = 0,
		id = 8,
		icon = "gerjiubathemeicon",
		comfortable = 51,
		discount_time = "",
		ids = {
			8001,
			8002,
			8101,
			8102,
			8104,
			8105,
			8108,
			8109,
			8110,
			8112,
			8113,
			8114,
			8115,
			8116,
			8117,
			8119,
			8120,
			8121,
			8201,
			8202,
			8203,
			8204,
			8301,
			8302,
			8303,
			8304,
			8305,
			8306,
			8307
		}
	},
	[10] = {
		Cfg_1 = 5,
		name = "이스트 글림 고풍 ",
		desc = "동방의 나라에서 온 전통 스타일.",
		deblocking = 1,
		new = 0,
		hot = 0,
		Cfg_2 = 8,
		is_view = 1,
		discount = 0,
		id = 10,
		icon = "cnthemeicon",
		comfortable = 0,
		discount_time = "",
		ids = {
			10001,
			10002,
			10103,
			10104,
			10106,
			10107,
			10108,
			10109,
			10110,
			10111,
			10112,
			10113,
			10114,
			10115,
			10116,
			10117,
			10118,
			10119,
			10120,
			10121,


mine.redmineclient.db.cache;

import android.util.Log;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import jp.redmine.redmineclient.entity.RedmineConnection;
import jp.redmine.redmineclient.entity.RedmineIssue;
import jp.redmine.redmineclient.entity.RedminePriority;
import jp.redmine.redmineclient.entity.RedmineStatus;

public class RedminePriorityModel implements IMasterModel<RedminePriority> {
	private final static String TAG = RedminePriorityModel.class.getSimpleName();
	protected Dao<RedminePriority, Integer> dao;
	public RedminePriorityModel(DatabaseCacheHelper helper) {
		try {
			dao = helper.getDao(RedminePriority.class);
		} catch (SQLException e) {
			Log.e(TAG, "getDao", e);
		}
	}

	public List<RedminePriority> fetchAll() throws SQLException{
		return dao.queryForAll();
	}

	public List<RedminePriority> fetchAll(int connection) throws SQLException{
		List<RedminePriority> item;
		item = dao.queryForEq(RedmineStatus.CONNECTION, connection);
		if(item == null){
			item = new ArrayList<>();
		}
		return item;
	}

	public RedminePriority fetchById(int connection, int statusId) throws SQLException{
		PreparedQuery<RedminePriority> query = dao.queryBuilder().where()
		.eq(RedminePriority.CONNECTION, connection)
		.and()
		.eq(RedminePriority.PRIORITY_ID, statusId)
		.prepare();
		Log.d(TAG,query.getStatement());
		List<RedminePriority> items = dao.query(query);
		return items.size() < 1 ? new RedminePriority() : items.get(0);
	}

	public RedminePriority fetchById(int id) throws SQLException{
		RedminePriority item;
		item = dao.queryForId(id);
		if(item == null)
			item = new RedminePriority();
		return item;
	}

	public int insert(RedminePriority item) throws SQLException{
		return dao.create(item);
	}

	public int update(RedminePriority item) throws SQLException{
		return dao.update(item);
	}
	public int delete(RedminePriority item) throws SQLException{
		return dao.delete(item);
	}
	public int delete(int id) throws SQLException{
		return dao.deleteById(id);
	}

	public void refreshItem(RedmineIssue data) throws SQLException{
		RedminePriority item = refreshItem(data.getConnectionId(),data.getPriority());
		data.setPriority(item);
	}
	public RedminePriority refreshItem(RedmineConnection info,RedminePriority data) throws SQLException{
		return refreshItem(info.getId(),data);
	}
	public RedminePriority refreshItem(int connection_id,RedminePriority data) throws SQLException{
		if(data == null)
			return null;

		RedminePriority project = this.fetchById(connection_id, data.getPriorityId());
		data.setConnectionId(connection_id);
		if(project.getId() == null){
			this.insert(data);
			data = fetchById(connection_id, data.getPriorityId());
		} else {
			data.setId(project.getId());

			if(project.getModified() == null){
				project.setModified(new java.util.Date());
			}
			if(data.getModified() == null){
				data.setModified(new java.util.Date());
			}
			if(!project.getModified().before(data.getModified())){
				this.update(data);
			}
		}
		return data;
	}
	@Override
	public long countByProject(int connection_id, long project_id) throws SQLException {
		QueryBuilder<RedminePriority, ?> builder = dao.queryBuilder();
		builder
			.setCountOf(tr


  for (final createdReceiverPort in [receiver, ...createdReceiverPorts]) {
    final receiverPortModule = createdReceiverPort.module;

    receiverPortModule._upperSourceMap[driverPortRef] = createdReceiverPort;
  }

  receiverPortRef.gets(driverPortRef);
}

/// Connects [intf1] to [intf2], creating all necessary ports through the
/// hierarchy.
///
/// If [intf1PathNewName] or [intf2PathNewName] are provided, then it will
/// prefer to name new interfaces with those names. If
/// [allowIntf1PathUniquification] or [allowIntf2PathUniquification] are
/// `false`, then the interface names will not be uniquified on those paths.
/// Uniquification also respects [BridgeModule.allowUniquification] at each
/// level. The [exceptPorts] parameter is an optional set of strings
/// representing the logical port names to be excluded.
void connectInterfaces(
  InterfaceReference intf1,
  InterfaceReference intf2, {
  String? intf1PathNewName,
  String? intf2PathNewName,
  bool allowIntf1PathUniquification = true,
  bool allowIntf2PathUniquification = true,
  Set<String>? exceptPorts,
  // TODO(mkorbel): finish these,
  //  possibly wont be needed for connectInterfaces
  //  String Function(String logical, String? physical)? portUniquify1,
  //  String Function(String logical, String? physical)? portUniquify2,
}) {
  if (intf1.module.hasBuilt || intf2.module.hasBuilt) {
    throw RohdBridgeException('Cannot connect interfaces after build.');
  }

  final intf1Instance = intf1.module;
  final intf2Instance = intf2.module;

  if (intf1.role != intf2.role) {
    // up and down case
    final commonParent = findCommonParent(intf1Instance, intf2Instance);

    if (commonParent == intf1Instance || commonParent == intf2Instance) {
      throw RohdBridgeException(
          'Vertical connections should have the same role, but the common'
          ' parent of $intf1Instance and $intf2Instance is $commonParent,'
          ' but with mismatched roles ${intf1.role} and ${intf2.role},'
          ' respectively.');
    }

    if (commonParent == null) {
      throw RohdBridgeException('No common parent found between'
          ' $intf1Instance and $intf2Instance');
    }
    final unusedPortsOnDriver = intf1.getUnmappedInterfacePorts();
    final unusedPortOnReceiver = intf2.getUnmappedInterfacePorts();
    if (exceptPorts != null && exceptPorts.isNotEmpty) {
      unusedPortsOnDriver.removeWhere(exceptPorts.contains);
      unusedPortOnReceiver.removeWhere(exceptPorts.contains);
    }

    if (unusedPortsOnDriver.isNotEmpty || unusedPortOnReceiver.isNotEmpty) {
      var errorString = 'Cannot connect interface ${intf1.name} '
          'at ${intf1Instance.name} to interface '
          '${intf2.name} at ${intf2Instance.name} '
          'because there are unmapped ports';
      if (unusedPortsOnDriver.isNotEmpty) {
        errorString += ' : $unusedPortsOnDriver on driver';
      }
      if (unusedPortOnReceiver.isNotEmpty) {
        errorString += ' : $unusedPortOnReceiver on receiver';
      }
      throw RohdBridgeException(errorString);
    }
    final intf1Top =
        (commonParent.getHierarchyDownTo(intf1Instance)![1] as BridgeModule)
            .pullUpInterface(
      intf1,
      newIntfName: intf1PathNewName,
      allowIntfUniquification: allowIntf1P


    )

    LoadChip('ED6_DT27/CH04211._CH', 'ED6_DT27/CH04211P._CP', 13)

    Jump('loc_A24')

    def _loc_9A0(): pass

    label('loc_9A0')

    If(
        (
            (Expr.Eval, "OP_42(ChrTable['提妲'])"),
            (Expr.PushLong, 0x1),
            Expr.Neg,
            Expr.Neq,
            Expr.Return,
        ),
        'loc_9BB',
    )

    LoadChip('ED6_DT07/CH00161._CH', 'ED6_DT07/CH00161P._CP', 13)

    Jump('loc_A24')

    def _loc_9BB(): pass

    label('loc_9BB')

    If(
        (
            (Expr.Eval, "OP_42(ChrTable['凯文神父'])"),
            (Expr.PushLong, 0x1),
            Expr.Neg,
            Expr.Neq,
            Expr.Return,
        ),
        'loc_9D6',
    )

    LoadChip('ED6_DT27/CH04081._CH', 'ED6_DT27/CH04081P._CP', 13)

    Jump('loc_A24')

    def _loc_9D6(): pass

    label('loc_9D6')

    If(
        (
            (Expr.Eval, "OP_42(ChrTable['乔丝特'])"),
            (Expr.PushLong, 0x1),
            Expr.Neg,
            Expr.Neq,
            Expr.Return,
        ),
        'loc_9F1',
    )

    LoadChip('ED6_DT07/CH00311._CH', 'ED6_DT07/CH00311P._CP', 13)

    Jump('loc_A24')

    def _loc_9F1(): pass

    label('loc_9F1')

    If(
        (
            (Expr.Eval, "OP_42(ChrTable['尤莉亚上尉'])"),
            (Expr.PushLong, 0x1),
            Expr.Neg,
            Expr.Neq,
            Expr.Return,
        ),
        'loc_A0C',
    )

    LoadChip('ED6_DT27/CH04581._CH', 'ED6_DT27/CH04581P._CP', 9)

    Jump('loc_A24')

    def _loc_A0C(): pass

    label('loc_A0C')

    If(
        (
            (Expr.Eval, "OP_42(ChrTable['穆拉'])"),
            (Expr.PushLong, 0x1),
            Expr.Neg,
            Expr.Neq,
            Expr.Return,
        ),
        'loc_A24',
    )

    LoadChip('ED6_DT27/CH04571._CH', 'ED6_DT27/CH04571P._CP', 9)

    def _loc_A24(): pass

    label('loc_A24')

    LoadChip('ED6_DT27/CH04500._CH', 'ED6_DT27/CH04500P._CP', 14)
    LoadChip('ED6_DT26/CH20280._CH', 'ED6_DT26/CH20280P._CP', 15)
    LoadChip('ED6_DT26/CH20431._CH', 'ED6_DT26/CH20431P._CP', 16)
    LoadChip('ED6_DT27/CH04502._CH', 'ED6_DT27/CH04502P._CP', 17)
    LoadChip('ED6_DT26/CH20461._CH', 'ED6_DT26/CH20461P._CP', 18)
    LoadChip('ED6_DT26/CH20242._CH', 'ED6_DT26/CH20242P._CP', 19)
    LoadChip('ED6_DT07/CH00171._CH', 'ED6_DT07/CH00171P._CP', 20)
    LoadChip('ED6_DT07/CH00170._CH', 'ED6_DT07/CH00170P._CP', 21)

    Return()

# id: 0x0006 offset: 0xA75
@scena.Code('func_06_A75')
def func_06_A75():
    EventBegin(0x00)
    FadeOut(0, 0, -1)
    Call(0, 0x0004)
    CameraMove(18160, 0, 1020, 0)
    OP_67(0, 6500, -10000, 0)
    CameraSetDistance(4590, 0)
    OP_6C(315000, 0)
    OP_6E(262, 0)
    ChrSetPos(0x0101, 23580, 0, -420, 270)
    ChrSetPos(0x0102, 23550, 0, 850, 270)
    ChrSetPos(0x00F8, 24710, 0, -660, 270)
    ChrSetPos(0x00F9, 24630, 0, 720, 270)

    @scena.Lambda('lambda_0B0C')
    def lambda_0B0C():
        CameraSetDistance(3960, 2500)

        ExitThread()

    DispatchAsync(0x0101, 0x0000, lambda_0B0C)

    @scena.Lambda('lambda_0B1C')
    def lambda_0B1C():
        ChrWalkTo(0x00FE, 17750, 0, -420, 3000, 0x00)

        ExitThread()

    DispatchAsync(0x0101, 0x0001, lambda_0B1C)

    Sleep(80)

    @scena.Lambda('lambda_0B3C')
    def lambda_0B3C():
        ChrWalkTo(0x00FE, 17580, 0, 850, 3000, 0x00)

        ExitThread()

    DispatchAsync(0x0102, 0x0001, lambda_0B3C)

    Sleep(100)

    @scena.Lambda('lambda_0B5C')
    def lambda_0B5C():
        ChrWalkTo(0x00FE, 19050, 0, -660, 3000, 0x00)

        ExitThread()

    DispatchAsync(0x00F8, 0x0001, lambda_0B5C)

    Sleep(150)

    @scena.Lambda('lambda_0B7C')
    def lambda_0B7C():
        ChrWalkTo(0x00FE, 18880, 0, 720, 3000, 0x00)

        ExitThread()

    DispatchAsync(0x00F9, 0x0001, lambda_0B7C)

    FadeIn(1000, 0)
    WaitForThreadExit(0x0101, 0x0000)
    WaitForThreadExit(0x0101, 0x0001)
    ChrSetChipByIndex(0x0008, 15)
    ChrSetPos(0x0008, -18090, 0, 240, 90)
    ChrClearFlags(0x0008, 0x0080)

    NpcTalk(
        0x0008,
        '男人的声音',
        (
            '#0200410168V……怎么是你们几个。',
            TxtCtl.Enter,
        ),
    )

    CloseMessageWindow()
    OP_20(0x000001F4)
    OP_62(0x0101, 0x00000000, 2000, 0x02, 0x07, 0x00000050, 0x01)
    PlaySE(39, 0x00, 0x64)
    Sleep(50)

    OP_62(0x0102, 0x00000000, 2000, 0x02, 0x07, 0x00000050, 0x01)
    PlaySE(39, 0x00, 0x64)
    Sleep(50)

    If(
        (
            (Expr.Eval, "OP_CB(0xF8)"),
            (Expr.PushLong, 0x7),
            Expr.Equ,
            E


ATE if bus hasn't been initialized before, or not all devices on the bus are freed
 *         - ESP_OK                on success
 */
esp_err_t spi_bus_free(spi_host_device_t host_id);

/**
 * @brief Helper function for malloc DMA capable memory for SPI driver
 *
 * @note This API will take care of the cache and hardware alignment internally.
 *       To free/release memory allocated by this helper function, simply calling `free()`
 *
 * @param[in]  host_id          SPI peripheral who will using the memory
 * @param[in]  size             Size in bytes, the amount of memory to allocate
 * @param[in]  extra_heap_caps  Extra heap caps based on MALLOC_CAP_DMA
 *
 * @return                      Pointer to the memory if allocated successfully
 */
void *spi_bus_dma_memory_alloc(spi_host_device_t host_id, size_t size, uint32_t extra_heap_caps);

#ifdef __cplusplus
}
#endif


m.goroutines)

-- Create another goroutine
go(function()
    print("Second goroutine running")
    sleep(0.5)
end)

-- Check memory again after some time
sleep(1)
local final_mem = check_memory()
print("\nFinal memory stats:")
print("  Allocation diff:", final_mem.alloc_diff)
print("  Total allocation diff:", final_mem.total_alloc_diff)
print("  System memory diff:", final_mem.sys_diff)
print("  Number of goroutines:", final_mem.goroutines)

-- Get list of goroutines
local goroutines = get_goroutines()
print("\nActive goroutines:")
for id, name in pairs(goroutines) do
    print("  Goroutine", id, ":", name)
end

-- Wait for all goroutines to complete
wait()


} else {
			this.focus( event, this.activeMenu.children( ".ui-menu-item" ).first() );
		}
	},

	_hasScroll: function() {
		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
	},

	select: function( event ) {
		// TODO: It should never be possible to not have an active item at this
		// point, but the tests don't trigger mouseenter before click.
		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
		var ui = { item: this.active };
		if ( !this.active.has( ".ui-menu" ).length ) {
			this.collapseAll( event, true );
		}
		this._trigger( "select", event, ui );
	}
});

}( jQuery ));
(function( $, undefined ) {

$.widget( "ui.progressbar", {
	version: "1.9.0",
	options: {
		value: 0,
		max: 100
	},

	min: 0,

	_create: function() {
		this.element
			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
			.attr({
				role: "progressbar",
				"aria-valuemin": this.min,
				"aria-valuemax": this.options.max,
				"aria-valuenow": this._value()
			});

		this.valueDiv = $( "

" )
			.appendTo( this.element );

		this.oldValue = this._value();
		this._refreshValue();
	},

	_destroy: function() {
		this.element
			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
			.removeAttr( "role" )
			.removeAttr( "aria-valuemin" )
			.removeAttr( "aria-valuemax" )
			.removeAttr( "aria-valuenow" );

		this.valueDiv.remove();
	},

	value: function( newValue ) {
		if ( newValue === undefined ) {
			return this._value();
		}

		this._setOption( "value", newValue );
		return this;
	},

	_setOption: function( key, value ) {
		if ( key === "value" ) {
			this.options.value = value;
			this._refreshValue();
			if ( this._value() === this.options.max ) {
				this._trigger( "complete" );
			}
		}

		this._super( key, value );
	},

	_value: function() {
		var val = this.options.value;
		// normalize invalid value
		if ( typeof val !== "number" ) {
			val = 0;
		}
		return Math.min( this.options.max, Math.max( this.min, val ) );
	},

	_percentage: function() {
		return 100 * this._value() / this.options.max;
	},

	_refreshValue: function() {
		var value = this.value(),
			percentage = this._percentage();

		if ( this.oldValue !== value ) {
			this.oldValue = value;
			this._trigger( "change" );
		}

		this.valueDiv
			.toggle( value > this.min )
			.toggleClass( "ui-corner-right", value === this.options.max )
			.width( percentage.toFixed(0) + "%" );
		this.element.attr( "aria-valuenow", value );
	}
});

})( jQuery );
(function( $, undefined ) {

// number of pages in a slider
// (how many times can you page up/down to go through the whole range)
var numPages = 5;

$.widget( "ui.slider", $.ui.mouse, {
	version: "1.9.0",
	widgetEventPrefix: "slide",

	options: {
		ani


}

.lds-ellipsis {
    margin: auto;
    display: block;
    position: relative;
    width: 80px;
    height: 80px;
}

    .lds-ellipsis div {
        position: absolute;
        top: 33.33333px;
        width: 10px;
        height: 10px;
        border-radius: 50%;
        background: currentColor;
        animation-timing-function: cubic-bezier(0, 1, 1, 0);
    }

        .lds-ellipsis div:nth-child(1) {
            left: 8px;
            animation: lds-ellipsis1 0.6s infinite;
        }

        .lds-ellipsis div:nth-child(2) {
            left: 8px;
            animation: lds-ellipsis2 0.6s infinite;
        }

        .lds-ellipsis div:nth-child(3) {
            left: 32px;
            animation: lds-ellipsis2 0.6s infinite;
        }

        .lds-ellipsis div:nth-child(4) {
            left: 56px;
            animation: lds-ellipsis3 0.6s infinite;
        }

@keyframes lds-ellipsis1 {
    0% {
        transform: scale(0);
    }

    100% {
        transform: scale(1);
    }
}

@keyframes lds-ellipsis3 {
    0% {
        transform: scale(1);
    }

    100% {
        transform: scale(0);
    }
}

@keyframes lds-ellipsis2 {
    0% {
        transform: translate(0, 0);
    }

    100% {
        transform: translate(24px, 0);
    }
}
html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

a, .btn-link {
    color: #006bb7;
}

.btn-primary {
    color: #fff;
    background-color: #1b6ec2;
    border-color: #1861ac;
}

.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
  box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}

.content {
    padding-top: 1.1rem;
}

h1:focus {
    outline: none;
}

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid #e50000;
}

.validation-message {
    color: #e50000;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2Lj


larger than 18,
 * indicating that more channels are available but not given in this message. This value should be 0
 * when no RC channels are available.
 * @param chan1Raw RC channel 1 value.
 * units = us
 * @param chan2Raw RC channel 2 value.
 * units = us
 * @param chan3Raw RC channel 3 value.
 * units = us
 * @param chan4Raw RC channel 4 value.
 * units = us
 * @param chan5Raw RC channel 5 value.
 * units = us
 * @param chan6Raw RC channel 6 value.
 * units = us
 * @param chan7Raw RC channel 7 value.
 * units = us
 * @param chan8Raw RC channel 8 value.
 * units = us
 * @param chan9Raw RC channel 9 value.
 * units = us
 * @param chan10Raw RC channel 10 value.
 * units = us
 * @param chan11Raw RC channel 11 value.
 * units = us
 * @param chan12Raw RC channel 12 value.
 * units = us
 * @param chan13Raw RC channel 13 value.
 * units = us
 * @param chan14Raw RC channel 14 value.
 * units = us
 * @param chan15Raw RC channel 15 value.
 * units = us
 * @param chan16Raw RC channel 16 value.
 * units = us
 * @param chan17Raw RC channel 17 value.
 * units = us
 * @param chan18Raw RC channel 18 value.
 * units = us
 * @param rssi Receive signal strength indicator in device-dependent units/scale. Values: [0-254],
 * UINT8_MAX: invalid/unknown.
 */
@GeneratedMavMessage(
  id = 65u,
  crcExtra = 118,
)
public data class RcChannels(
  /**
   * Timestamp (time since system boot).
   * units = ms
   */
  @GeneratedMavField(type = "uint32_t")
  public val timeBootMs: UInt = 0u,
  /**
   * Total number of RC channels being received. This can be larger than 18, indicating that more
   * channels are available but not given in this message. This value should be 0 when no RC channels
   * are available.
   */
  @GeneratedMavField(type = "uint8_t")
  public val chancount: UByte = 0u,
  /**
   * RC channel 1 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan1Raw: UShort = 0u,
  /**
   * RC channel 2 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan2Raw: UShort = 0u,
  /**
   * RC channel 3 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan3Raw: UShort = 0u,
  /**
   * RC channel 4 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan4Raw: UShort = 0u,
  /**
   * RC channel 5 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan5Raw: UShort = 0u,
  /**
   * RC channel 6 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan6Raw: UShort = 0u,
  /**
   * RC channel 7 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan7Raw: UShort = 0u,
  /**
   * RC channel 8 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan8Raw: UShort = 0u,
  /**
   * RC channel 9 value.
   * units = us
   */
  @GeneratedMavField(type = "uint16_t")
  public val chan9Raw: UShort = 0u,
  /**
   * RC channel 10 value.
   * units = us
   */
  @GeneratedMavField(type =


 [JoranSpringPropertyTest] using the Undertow reactive web server.
 */
@UndertowReactiveWebTest
class UndertowReactiveWebJoranSpringPropertyTest : JoranSpringPropertyTest()
package dev.akkinoc.spring.boot.logback.access

import ch.qos.logback.access.common.spi.IAccessEvent
import dev.akkinoc.spring.boot.logback.access.value.LogbackAccessLocalPortStrategy
import io.undertow.UndertowOptions
import org.apache.catalina.valves.RemoteIpValve
import org.springframework.boot.context.properties.ConfigurationProperties

/**
 * The configuration properties for Logback-access.
 *
 * @property enabled
 *  Whether to enable auto-configuration.
 * @property config
 *  The location of the configuration file.
 *  Specify a URL that starts with "classpath:" or "file:".
 *  Auto-detected by default:
 *      1. "classpath:logback-access-test.xml"
 *      2. "classpath:logback-access.xml"
 *      3. "classpath:logback-access-test-spring.xml"
 *      4. "classpath:logback-access-spring.xml"
 *      5. "classpath:dev/akkinoc/spring/boot/logback/access/logback-access-spring.xml"
 * @property localPortStrategy
 *  The strategy to change the behavior of [IAccessEvent.getLocalPort].
 * @property tomcat
 *  The properties for the Tomcat web server.
 * @property undertow
 *  The properties for the Undertow web server.
 * @property teeFilter
 *  The properties for the tee filter.
 */
@ConfigurationProperties("logback.access")
data class LogbackAccessProperties
@JvmOverloads
constructor(
    val enabled: Boolean = true,
    val config: String? = null,
    val localPortStrategy: LogbackAccessLocalPortStrategy = LogbackAccessLocalPortStrategy.SERVER,
    val tomcat: Tomcat = Tomcat(),
    val undertow: Undertow = Undertow(),
    val teeFilter: TeeFilter = TeeFilter(),
) {

    companion object {

        /**
         * The default locations of the configuration file.
         */
        @JvmField
        val DEFAULT_CONFIGS: List<String> = listOf(
            "classpath:logback-access-test.xml",
            "classpath:logback-access.xml",
            "classpath:logback-access-test-spring.xml",
            "classpath:logback-access-spring.xml",
        )

        /**
         * The fallback location of the configuration file.
         */
        const val FALLBACK_CONFIG: String = "classpath:dev/akkinoc/spring/boot/logback/access/logback-access-spring.xml"

    }

    /**
     * The properties for the Tomcat web server.
     *
     * @property requestAttributesEnabled
     *  Whether to enable the request attributes to work with [RemoteIpValve].
     *  Defaults to the presence of [RemoteIpValve] enabled by the property "server.forward-headers-strategy=native".
     */
    data class Tomcat
    @JvmOverloads
    constructor(
        val requestAttributesEnabled: Boolean? = null,
    )

    /**
     * The properties for the Undertow web server.
     *
     * @property recordRequestStartTime
     *  Whether to enable [UndertowOptions.RECORD_REQUEST_START_TIME].
     *  Used to measure [IAccessEvent.getElapsedTime] and [IAccessEvent.getElapsedSeconds].
     */
    data class Undertow
    @JvmOverloads
    constructor(
        val recordRequestStartTime: Boolean = true,
    )

    /**
     * The properties for the tee filter.
     *
     * @property enabled
     *  Whether to enable the tee filter.
     * @property includes
     *  The host names to activate.
     *  By default, all hosts are activated.
     * @property excludes
     *  The host names to deactivate.
     *  By default, all hosts are activated.
     */
    data class TeeFilter
    @JvmOverloads
    c


   tad num
   isz number
   jmp i number

eject: 0
   lac pl
   sna
   jmp i eject
   lac nl
   sna
   jmp i eject
1:
   sad pl
   jmp 1f
   jms newline
   lac nl
   jmp 1b
1:
   dzm nl
   jmp i eject

storechar: 0
   lmq
   lac nc
   sza
   jmp 1f
   law char-1
   dac 10
1:
   lacq
   dac i 10
   jms width
   cma
   tad d1
   tad ne
   dac ne
   -1
   tad nc
" ** 11-56-91.pdf page 18
   dac nc
   jmp i storechar

getword: 0
   law word-1
   dac 8
		" *** hand written box/arrow to move after 1:
   dzm wne
   dzm wch
1:
   lac i 11
   sad o12
   jmp i getword
2:
   dac i 8
   lmq
   jms width
   cma
   tad d1
   tad wne
   dac wne
   -1
   tad wch
   dac wch
   lacq
   sad o40
   jmp 1b
   lac word
   sad o40
   jmp 1f
   lac o40
   dac word
   lacq
   jmp 2b
1:
   lac i 11
   sad o12
   jmp 1f
   sad o40
   jmp 1f
   dac i 8
   jms width
   cma
   tad d1
   tad wne
   dac wne
   -1
   tad wch
   dac wch
   jmp 1b
1:
   -1
   tad 11
   dac 11
   isz getword
   jmp i getword

need: 0
   lac ls
   dac 1f
   lac i need
   jms laci
" ** 11-56-91.pdf page 19
   cll; mul; 1: 0
   lacq
   tad nl
   cma
   tad bl
   spa
   jms eject
   isz need
   jmp i need

" text line routine
text: 0
   -1
   tad ul
   sma
   jms undline
   -1
   tad ce
   sma
   jms center
   law rawchar-1
   dac 11
   lac rawchar
   sad o12
   jmp 1f-1
   sad o40
   jmp 1f-1
   lac fi
   sza
   jmp 2f
   skp
   jms break
1:
   lac i 11
   sad o12
   jmp 1f
   jms storechar
   jmp 1b
1:
   lac nc
   sna
   jms nline
   jms break
   jmp i text
2:
   jms getword; jmp i text
   lac wne
   tad ne
   tad un
   tad ll
   spa
   jms adjust
   law word-1
   dac 8
   lac nwd
   sza
   jmp 3f
1:
   lac i 8
   sad o40
   skp
" ** 11-56-91.pdf page 20
   jmp 3f+1
   isz wch
   jmp 1b
3:
   lac i 8
   jms storechar
   isz wch
   jmp 3b
   isz nwd
   jmp 2b

" adjust routine
adjust: 0
   lac nwd
   sna
   jmp i adjust
   law char-1
   dac 8
   law tchar-1
   dac 9
   dzm ndiv
   dzm nrem
   lac ad
   sna
   jmp 1f
   -1
   tad nwd
   sna
   j


 provider web service page.
        token: String,
    },
    /// <http://bmeo.org> provider
    Bmeo,
    /// <http://fifo.cc> provider
    FifoCc,
    /// <https://goo.gl> provider of Google
    GooGl {
        /// An api key string which you may obtain on the provider web service page.
        api_key: String,
    },
    /// <https://kutt.it> provider, can be self hosted
    Kutt {
        /// An api key string which you may obtain on the provider web service page.
        api_key: String,
        /// The api host, defaults to '<https://kutt.it>'
        host: Option<String>,
    },
    /// <https://hec.su> provider
    ///
    /// Notes:
    ///
    /// * Limited to 3000 API requests per day
    HecSu,
    /// <http://hmm.rs> provider
    HmmRs,
    /// <https://is.gd> provider
    IsGd,
    /// <http://nowlinks.net> provider
    NowLinks,
    /// <http://phx.co.in> provider
    ///
    /// Notes:
    ///
    /// * After some time the service will display ads
    /// * Instead of redirecting, a preview page will be displayed
    /// * Currently unstable
    PhxCoIn,
    /// <http://psbe.co> provider
    PsbeCo,
    /// <http://s.coop> provider
    SCoop,
    /// <http://rlu.ru> provider
    ///
    /// Notes:
    ///
    /// * If you send a lot of requests from one IP, it can be
    ///   blocked. If you plan to add more then 100 URLs in one hour, please let
    ///   the technical support know. Otherwise your IP can be blocked
    ///   unexpectedly. Prior added URLs can be deleted.
    Rlu,
    /// <http://sirbz.com> provider
    ///
    /// Notes:
    ///
    /// * By default, you are limited to 250 requests per 15 minutes.
    SirBz,
    /// <http://tinyurl.com> provider
    ///
    /// Notes:
    ///
    /// * This service does not provide any API.
    /// * The implementation result depends on the service result web page.
    TinyUrl,
    /// <http://tiny.ph> provider
    TinyPh,
    /// <http://tny.im> provider
    TnyIm,
    /// <http://url-shortener.io> provider
    UrlShortenerIo,
    /// <https://v.gd> provider
    VGd,
}

impl Provider {
    /// Converts the Provider variant into its domain name equivilant
    pub fn to_name(&self) -> &str {
        match *self {
            Provider::Abv8 => "abv8.me",
            Provider::BamBz => "bam.bz",
            Provider::BitLy { .. } => "bitly.com",
            Provider::Bmeo => "bmeo.org",
            Provider::FifoCc => "fifo.cc",
            Provider::GooGl { .. } => "goo.gl",
            Provider::HmmRs => "hmm.rs",
            Provider::HecSu => "hec.su",
            Provider::IsGd => "is.gd",
            Provider::Kutt { ref host, .. } => host
                .as_ref()
                .map(|h| h.rsplit("//").next().unwrap())
                .unwrap_or("kutt.it"),
            Provider::NowLinks => "nowlinks.net",
            Provider::PhxCoIn => "phx.co.in",
            Provider::PsbeCo => "psbe.co",
            Provider::SCoop => "s.


CopyConstantObject("md.solidearth.settings.rotation",SolidearthSettingsRotationEnum));

	/*deal with planet radius and area: */
	parameters->AddObject(iomodel->CopyConstantObject("md.solidearth.planetradius",SolidearthPlanetRadiusEnum));
	iomodel->FetchData(&planetradius,"md.solidearth.planetradius");
	planetarea=4*PI*planetradius*planetradius;
	parameters->AddObject(new DoubleParam(SolidearthPlanetAreaEnum,planetarea));

	/*love numbers: */
	iomodel->FetchData(&love_h,&nl,NULL,"md.solidearth.lovenumbers.h");
	iomodel->FetchData(&love_l,&nl,NULL,"md.solidearth.lovenumbers.l");
	iomodel->FetchData(&love_k,&nl,NULL,"md.solidearth.lovenumbers.k");

	/*compute elastic green function for a range of angles*/
	iomodel->FetchData(&degacc,"md.esa.degacc");
	M=reCast<int,IssmDouble>(180./degacc+1.);
	U_elastic=xNew<IssmDouble>(M);
	H_elastic=xNew<IssmDouble>(M);
	G_elastic=xNew<IssmDouble>(M);

	/*compute combined legendre + love number (elastic green function:*/
	m=DetermineLocalSize(M,IssmComm::GetComm());
	GetOwnershipBoundariesFromRange(&lower_row,&upper_row,m,IssmComm::GetComm());
	U_elastic_local=xNew<IssmDouble>(m);
	H_elastic_local=xNew<IssmDouble>(m);
	G_elastic_local=xNew<IssmDouble>(m);

	/*compute U_elastic_local, H_elastic_local, and G_elastic_local {{{ */
	for(int i=lower_row;i<upper_row;i++){
		IssmDouble alpha,x;
		alpha= reCast<IssmDouble>(i)*degacc * PI / 180.0;

		U_elastic_local[i-lower_row]= 0.5*love_h[nl-1]/sin(alpha/2.0);
		H_elastic_local[i-lower_row]= -love_l[nl-1]*(nl-1) * cos(alpha/2)*(1 + 2*sin(alpha/2)) / (2*sin(alpha/2)*(1 + sin(alpha/2)));
		G_elastic_local[i-lower_row]= -(-0.25 + love_h[nl-1] - 0.5*love_k[nl-1]*(nl-1)) / sin(alpha/2.0); // negative sign is imposed to mean g_deformed_earth minus g_initial_undeformed_earth. Ferrell defined it as the difference in g between the undeformed initial Earth and deformed Earth.
		//IssmDouble Pn,Pn1,Pn2;
		//IssmDouble Pn_p,Pn_p1,Pn_p2;
		IssmDouble Pn = 0.;
		IssmDouble Pn1 = 0.;
		IssmDouble Pn2 = 0.;
		IssmDouble Pn_p = 0.;
		IssmDouble Pn_p1 = 0.;
		IssmDouble Pn_p2 = 0.;

		for (int n=0;n<nl;n++) {
			IssmDouble deltalove_U;
			IssmDouble deltalove_H;
			IssmDouble deltalove_G;

			deltalove_U = love_h[n]-love_h[nl-1];
			deltalove_H = love_l[n] - (love_l[nl-1]*(nl-1)/(n+1e-12));
			deltalove_G = 2*(love_h[n]-love_h[nl-1]) - (n*love_k[n]-love_k[


O\n" +
	"\x06result\x18\x01 \x01(\x0e2\x1d.protocol.DOTAJoinLobbyResult:\x18DOTA_JOIN_RESULT_SUCCESSR\x06result\"\xfc\x02\n" +
	"\x11CMsgBotGameCreate\x12\x1d\n" +
	"\n" +
	"search_key\x18\x01 \x01(\tR\tsearchKey\x12%\n" +
	"\x0eclient_version\x18\x02 \x01(\rR\rclientVersion\x12b\n" +
	"\x12difficulty_radiant\x18\x03 \x01(\x0e2\x1b.protocol.DOTABotDifficulty:\x16BOT_DIFFICULTY_PASSIVER\x11difficultyRadiant\x12B\n" +
	"\x04team\x18\x04 \x01(\x0e2\x16.protocol.DOTA_GC_TEAM:\x16DOTA_GC_TEAM_GOOD_GUYSR\x04team\x12\x1b\n" +
	"\tgame_mode\x18\x05 \x01(\rR\bgameMode\x12\\\n" +
	"\x0fdifficulty_dire\x18\x06 \x01(\x0e2\x1b.protocol.DOTABotDifficulty:\x16BOT_DIFFICULTY_PASSIVER\x0edifficultyDire\">\n" +
	"\x1bCMsgDOTAPartyMemberSetCoach\x12\x1f\n" +
	"\vwants_coach\x18\x01 \x01(\bR\n" +
	"wantsCoach\"F\n" +
	"\x16CMsgDOTASetGroupLeader\x12,\n" +
	"\x12new_leader_steamid\x18\x01 \x01(\x06R\x10newLeaderSteamid\"r\n" +
	"\x1aCMsgDOTACancelGroupInvites\x12)\n" +
	"\x10invited_steamids\x18\x01 \x03(\x06R\x0finvitedSteamids\x12)\n" +
	"\x10invited_groupids\x18\x02 \x03(\x06R\x0finvitedGroupids\"0\n" +
	"\x1aCMsgDOTASetGroupOpenStatus\x12\x12\n" +
	"\x04open\x18\x01 \x01(\bR\x04open\"@\n" +
	"\x18CMsgDOTAGroupMergeInvite\x12$\n" +
	"\x0eother_group_id\x18\x01 \x01(\x06R\fotherGroupId\"b\n" +
	"\x1aCMsgDOTAGroupMergeResponse\x12,\n" +
	"\x12initiator_group_id\x18\x01 \x01(\x06R\x10initiatorGroupId\x12\x16\n" +
	"\x06accept\x18\x02 \x01(\bR\x06accept\"n\n" +
	"\x17CMsgDOTAGroupMergeReply\x12S\n" +
	"\x06result\x18\x01 \x01(\x0e2\x1f.protocol.EDOTAGroupMergeResult:\x1ak_EDOTAGroupMergeResult_OKR\x06result\"\x94\x04\n" +
	"\x1dCMsgSpectatorLobbyGameDetails\x12\x1a\n" +
	"\blanguage\x18\x01 \x01(\rR\blanguage\x12\x19\n" +
	"\bmatch_id\x18\x02 \x01(\x04R\amatchId\x12&\n" +
	"\x0fserver_steam_id\x18\x03 \x01(


JECT_ID]/resources/[RESOURCE_URL]`.
     *

     *
     * string name = 1 [(.google.api.field_behavior) = REQUIRED];
     *
     * @param value The name to set.
     * @return This builder for chaining.
     */
    public Builder setName(java.lang.String value) {
      if (value == null) {
        throw new NullPointerException();
      }
      name_ = value;
      bitField0_ |= 0x00000001;
      onChanged();
      return this;
    }

    /**
     *
     *
     *

     * Required. The name of the resource in the form of
     * `projects/[PROJECT_ID]/resources/[RESOURCE_URL]`.
     *

     *
     * string name = 1 [(.google.api.field_behavior) = REQUIRED];
     *
     * @return This builder for chaining.
     */
    public Builder clearName() {
      name_ = getDefaultInstance().getName();
      bitField0_ = (bitField0_ & ~0x00000001);
      onChanged();
      return this;
    }

    /**
     *
     *
     *

     * Required. The name of the resource in the form of
     * `projects/[PROJECT_ID]/resources/[RESOURCE_URL]`.
     *

     *
     * string name = 1 [(.google.api.field_behavior) = REQUIRED];
     *
     * @param value The bytes for name to set.
     * @return This builder for chaining.
     */
    public Builder setNameBytes(com.google.protobuf.ByteString value) {
      if (value == null) {
        throw new NullPointerException();
      }
      checkByteStringIsUtf8(value);
      name_ = value;
      bitField0_ |= 0x00000001;
      onChanged();
      return this;
    }

    private com.google.protobuf.SingleFieldBuilderV3<
            com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation,
            com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation.Builder,
            com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocationOrBuilder>
        cloudStorageLocationBuilder_;

    /**
     *
     *
     *

     * Optional. Empty placeholder to denote that this is a Google Cloud Storage
     * export request.
     *

     *
     *
     * .google.devtools.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation cloud_storage_location = 2 [(.google.api.field_behavior) = OPTIONAL];
     *
     *
     * @return Whether the cloudStorageLocation field is set.
     */
    @java.lang.Override
    public boolean hasCloudStorageLocation() {
      return targetCase_ == 2;
    }

    /**
     *
     *
     *

     * Optional. Empty placeholder to denote that this is a Google Cloud Storage
     * export request.
     *

     *
     *
     * .google.devtools.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation cloud_storage_location = 2 [(.google.api.field_behavior) = OPTIONAL];
     *
     *
     * @return The cloudStorageLocation.
     */
    @java.lang.Override
    public com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation
        getCloudStorageLocation() {
      if (cloudStorageLocationBuilder_ == null) {
        if (targetCase_ == 2) {
          return (com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation) target_;
        }
        return com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation
            .getDefaultInstance();
      } else {
        if (targetCase_ == 2) {
          return cloudStorageLocationBuilder_.getMessage();
        }
        return com.google.containeranalysis.v1.ExportSBOMRequest.CloudStorageLocation
            .getDefaultInstance();
      }


는 특성 데이터, y는 타겟 레이블(양성/음성)입니다.
cancer = load_breast_cancer()
X, y = cancer.data, cancer.target

print(f"데이터셋 형태 (X): {X.shape}")
print(f"타겟 레이블 분포 (y): {np.bincount(y)}") # 클래스 0(악성), 클래스 1(양성)의 개수

# 2. 훈련/테스트 데이터 분리
# 훈련 세트와 테스트 세트로 데이터를 분할합니다.
# test_size=0.3: 전체 데이터의 30%를 테스트 세트로 사용합니다.
# random_state=42: 재현성을 위한 난수 시드입니다.
# stratify=y: 타겟 변수(y)의 클래스 비율을 훈련 세트와 테스트 세트에서 동일하게 유지합니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

print(f"\n훈련 세트 형태: {X_train.shape}, {y_train.shape}")
print(f"테스트 세트 형태: {X_test.shape}, {y_test.shape}")

# 3. 그레디언트 부스팅 모델 생성 및 학습
# n_estimators=100: 100개의 약한 학습기(결정 트리)를 생성합니다.
# learning_rate=0.1: 학습률을 0.1로 설정하여 각 트리의 기여도를 조절합니다.
# max_depth=3: 각 트리의 최대 깊이를 3으로 제한합니다.
# random_state=42: 재현성을 위한 난수 시드입니다.
gb_clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)
gb_clf.fit(X_train, y_train)

# 4. 모델 평가
# score() 메서드는 분류 문제에서 정확도(Accuracy)를 반환합니다.
print(f"\n그레디언트 부스팅 정확도: {gb_clf.score(X_test, y_test):.4f}")

# 테스트 세트에 대한 예측 수행
y_pred_gb = gb_clf.predict(X_test)

# 분류 보고서 및 혼동 행렬


e
    $ platformio ci \
    >   --board nanoatmega328 \
    >   --lib ../../src \
    >   --project-option="targets=upload" \
    >   --project-option="upload_port=/dev/ttyUSB0" \
    >   --project-option="build_flags=-DSERIAL_RX_BUFFER_SIZE=512" \
    >   SerialIface.ino

## ScummVM

Le code utilisé dans *DOSBox* peut être adapté à *ScummVM*
([rustine][patch-scummvm]). Pour tester, vous devez compiler *ScummVM*
depuis les sources :

    ::console
    $ sudo apt build-dep scummvm
    $ git clone https://github.com/vincentbernat/scummvm.git -b feature/opl2audioboard
    $ cd scummvm
    $ ./configure --disable-all-engines --enable-engine=scumm && make

Démarrez ensuite *ScummVM* avec `./scummvm`. Sélectionnez « AdLib
Emulator » comme périphérique musical et « OPL2 Arduino » comme
émulateur AdLib[^serial]. Comme pour *DOSBox*, surveillez la console
pour vérifier que le tampon de réception est bien dimensionné.

[^serial]: Pour spécifier un port série autre que `/dev/ttyUSB0`,
    ajoutez une ligne `opl2arduino_device=` dans le fichier
    `~/.scummvmrc`.

Amusez-vous bien ! 🎶

*[VGM]: Video Game Music

[previous article]: [[fr/blog/2018-adlib-opl2lpt.html]] "OPL2LPT: une carte son AdLib sur port parallèle"
[OPL2LPT]: https://www.serdashop.com/OPL2LPT "OPL2LPT on Serdashop"
[AdLib sound card]: https://fr.wikipedia.org/wiki/Adlib "AdLib sur Wikipedia"
[Yamaha YM3812]: https://en.wikipedia.org/wiki/Yamaha_YM3812 "Yamaha YM3812 on Wikipedia"
[OPL2 Audio Board for Arduino]: https://hackaday.io/project/18995-opl2-audio-board-for-arduino-raspberry-pi "OPL2 Audio Board for Arduino & Raspberry Pi"
[DOSBox]: https://www.dosbox.com/ "DOSBox, an x86 emulator with DOS"
[ScummVM]: https://www.scummvm.org/ "ScummVM"
[The Secret of Monkey Island]: https://vgmrips.net/packs/pack/the-secret-of-monkey-island-ibm-pc-at "VGMRips: The Secret of Monkey Island"
[Indiana Jones and the Last Crusade]: https://vgmrips.net/packs/pack/indiana-jones-and-the-last-crusade-the-graphic-adventure-ibm-pc-xt-at "VGMRips: Indiana Jones and the Last Crusade"
[Star Wars: X-Wing]: https://vgmrips.net/packs/pack/star-wars-x-wing-ibm-pc-at "VGMRips: Star Wars: X-Wing"
[demo songs shipped with the AdLib sound card]: https://vgmrips.net/packs/pack/adlib-music-synthesizer-card-demo-songs-ibm-pc-xt-at "VGMRips: Adlib Music Synthesizer Card Demo Songs"
[Tindie]: https://www.tindie.com/products/cheerful/opl2-audio-board/ "OPL2 Audio Board"
[Arduino Nano]: https://store.arduino.cc/arduino-nano "Arduino Nano"
[GitHub]: https://github.com/DhrBaksteen/ArduinoOPL2/ "Arduino library for use with the OPL2 board (YM3812)"
[PlatformIO]: https://platformio.org/ "PlatformIO is an open source ecosystem for IoT development"
[VGMRips]: https://vgmrips.net/packs/ "VGMRips"
[YM3812/OPL2]: https://vgmrips.net/packs/chip/ym3812 "VGMRips: Packs using YM3812"
[Day of


milygu"},{name:"Arvind Satyanarayan",url:"http://arvindsatya.com"},{name:"Jeffrey Heer",url:"https://idl.cs.washington.edu"},{name:"Dominik Moritz",url:"https://www.domoritz.de"}];var de="build/vega-themes.js";var ve="build/vega-themes.module.js";var ge="build/vega-themes.min.js";var me="build/vega-themes.min.js";var ye="build/vega-themes.module.d.ts";var be={type:"git",url:"https://github.com/vega/vega-themes.git"};var Ee=["src","build"];var we={prebuild:"yarn clean",build:"rollup -c",clean:"rimraf build && rimraf examples/build","copy:data":"rsync -r node_modules/vega-datasets/data/* examples/data","copy:build":"rsync -r build/* examples/build","deploy:gh":"yarn build && mkdir -p examples/build && rsync -r build/* examples/build && gh-pages -d examples",preversion:"yarn lint",serve:"browser-sync start -s -f build examples --serveStatic examples",start:"yarn build && concurrently --kill-others -n Server,Rollup 'yarn serve' 'rollup -c -w'",prepare:"beemo create-config",eslintbase:"beemo eslint .",format:"yarn eslintbase --fix",lint:"yarn eslintbase",release:"release-it"};var xe={"@release-it/conventional-changelog":"^5.1.1","@rollup/plugin-json":"^6.0.0","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.4.0","browser-sync":"^2.27.10",concurrently:"^7.3.0","gh-pages":"^5.0.0","release-it":"^15.6.0","rollup-plugin-bundle-size":"^1.0.3","rollup-plugin-ts":"^3.0.2",rollup:"^3.15.0",typescript:"^4.7.4","vega-lite-dev-config":"^0.21.0","vega-lite":"^5.0.0",vega:"^5.19.1"};var Oe={vega:"*","vega-lite":"*"};var Ae={};var Ie={name:se,version:le,description:ce,keywords:ue,license:fe,author:he,contributors:pe,main:de,module:ve,unpkg:ge,jsdelivr:me,types:ye,repository:be,files:Ee,scripts:we,devDependencies:xe,peerDependencies:Oe,dependencies:Ae};const Ne="#fff";const Se="#888";const Le={background:"#333",view:{stroke:Se},title:{color:Ne,subtitleColor:Ne},style:{"guide-label":{fill:Ne},"guide-title":{fill:Ne}},axis:{domainColor:Ne,gridColor:Se,tickColor:Ne}};const Te="#4572a7";const Re={background:"#fff",arc:{fill:Te},area:{fill:Te},line:{stroke:Te,strokeWidth:2},path:{stroke:Te},rect:{fill:Te},shape:{stroke:Te},symbol:{fill:Te,strokeWidth:1.5,size:50},axis:{bandPosition:.5,grid:true,gridColor:"#000000",gridOpacity:1,gridWidth:.5,labelPadding:10,tickSize:5,tickWidth:.5},axisBand:{grid:false,tickExtra:true},legend:{labelBaseline:"middle",labelFontSize:11,symbolSize:50,symbolType:"square"},range:{category:["#4572a7


Transaction = false;
        db.commit();
    }
}

void SQLCache::setRenewalThreshold(const int days)
{
    m_updateAccessIfOlder = days;
}

/** @short Return a proper represenation of the mailbox name to be used in the SQL queries

A null QString is represented as NIL, which makes our cache unhappy.
*/
QString SQLCache::mailboxName(const QString &mailbox)
{
    return mailbox.isEmpty() ? QLatin1String("") : mailbox;
}

DbConnectionCleanup::~DbConnectionCleanup()
{
    QSqlDatabase::removeDatabase(name);
}

}
}
/* Copyright (C) 2006 - 2014 Jan Kundrát <jkt@flaska.net>

   This file is part of the Trojita Qt IMAP e-mail client,
   http://trojita.flaska.net/

   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 2 of
   the License or (at your option) version 3 or any later version
   accepted by the membership of KDE e.V. (or its successor approved
   by the membership of KDE e.V.), which shall act as a proxy
   defined in Section 14 of version 3 of the 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.  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/>.
*/

#include "OneMessageModel.h"
#include "kdeui-itemviews/kdescendantsproxymodel.h"
#include "FindInterestingPart.h"
#include "ItemRoles.h"
#include "Model.h"
#include "SubtreeModel.h"
#include "Imap/Network/MsgPartNetAccessManager.h"

namespace Imap
{
namespace Mailbox
{

OneMessageModel::OneMessageModel(Model *model): QObject(model), m_subtree(0)
{
    m_subtree = new SubtreeModelOfModel(this);
    m_subtree->setSourceModel(model);
    connect(m_subtree, &QAbstractItemModel::modelReset, this, &OneMessageModel::envelopeChanged);
    connect(m_subtree, &QAbstractItemModel::dataChanged, this, &OneMessageModel::envelopeChanged);
    connect(this, &OneMessageModel::envelopeChanged, this, &OneMessageModel::flagsChanged);
    connect(model, &QAbstractItemModel::dataChanged, this, &OneMessageModel::handleModelDataChanged);
    m_flatteningModel = new KDescendantsProxyModel(this);
    m_flatteningModel->setSourceModel(m_subtree);
    QHash<int, QByteArray> roleNames;
    roleNames[RoleIsFetched] = "isFetched";
    roleNames[RolePartMimeType] = "mimeType";
    roleNames[RolePartCharset] = "charset";
    roleNames[RolePartContentFormat] = "contentFormat";
    roleNames[RolePartTransferEncoding] = "transferEncoding";
    roleNames[RolePartBodyFldId] = "bodyFldId";
    roleNames[RolePartBodyDisposition] = "bodyDisposition";
    roleNames[RolePartFileName] = "fileName";
    roleNames[RolePartOctets] = "size";
    roleNames[RolePartId] = "partId";
    roleNames[RolePartPathToPart] = "pathToPart";
    m_flatteningModel->proxySetRoleNames(roleNames);
}

void OneMessageModel::setMessage(const QString &mailbox, const uint uid)
{
    m_mainPartUrl = QUrl(QStringLiteral("about:blank"));
    emit mainPartUrlChanged();
    QAb


cn/store/bot/7339009014883188763)
### Prompt
```md
# 角色
你是一个智能小说创作引擎，集深度学习、自然语言处理技术于一体，搭载文学知识与创作规则。你助力用户高效构思、打磨文稿，并通过智能交互及个性化建议，优化写作流程。无论是情节、人物还是风格，你都能精准辅助，激发创作潜力，是现代作家和文学爱好者的理想助手。

## 技能
- 根据用户给定的主题和关键信息，生成一部完整的小说。
- 对用户提供的小说片段进行续写。
- 按照用户的要求改写已有的小说。

## 限制
- 你的创作必须基于用户提供的信息，不能脱离给定的主题。
- 续写和改写的内容要与原小说风格保持一致。
- 你的回复必须符合小说的基本结构和逻辑，具有一定的可读性。
```
### 描述
智能小说创作引擎，集深度学习、自然语言处理技术于一体，搭载文学知识与创作规则。它助力作家高效构思、打磨文稿，并通过智能交互及个性化建议，优化写作流程。无论是情节、人物还是风格，该引擎都能精准辅助，激发创作潜力，是现代作家和文学爱好者的理想助手。
### 开场白
你好，我是一个写小说的 Bot，很高兴能和你交流。我可以帮你生成故事情节、人物设定等，也可以和你探讨小说写作的技巧和经验。
### 开场白预置问题
你能帮我构思一个小说的情节吗？;
你有没有什么技巧可以帮助我提高小说写作的水平？;
你有没有读过一些好的小说，可以推荐给我吗？
### 插件信息
```json
{}
```
### 插件详细设置
```json
{}
```
### 知识库信息
```json
{
  "auto": true,
  "knowledge_info": [],
  "min_score": 0.5,
  "search_strategy": 0,
  "top_k": 3
}
```
### 工作流设置
```json
[]
```
### 工作流详细设置
```json
{}
```

## [漫画生成器](https://www.coze.cn/store/bot/7339722140285108233)
### Prompt
```md
# 角色
你是一个漫画生成机器人，可以将用户输入的文本转化为漫画图片。

## 技能
### 技能 1: 文本转漫画
1. 当用户输入文本后，使用工具将文本转换为漫画图片。
2. 确保转换后的漫画图片符合用户的需求和期望。

## 限制
- 只处理与文本转漫画相关的任务，拒绝处理其他无关的任务。
- 所输出的内容必须按照给定的格式进行组织，不能偏离框架要求。
- 请使用 Markdown 的 ^^ 形式说明引用来源。
```
### 描述
一个可以将文本转化为漫画图片的 Bot
### 开场白
你好！我是一个能够将文本转化为漫画图片的 Bot。不管你是想看漫画还是创作漫画，我都能帮到你！
### 开场白预置问题
能否请你帮我将一段文字转化为漫画图片？;
你能够处理多长的文本？;
你能生成什么样的漫画图片？是黑白的还是彩色的？
### 插件信息
```json
{
  "7257418203524284472": {
    "description": "根据文本描述生成图像，可指定图像数量和大小。",
    "icon_url": "https://lf9-appstore-sign.oceancloudapi.com/ocean-cloud-


lv_limit = 30,
		desc = "성정 큐브와 장비의 공명 실험에서, 특정 부품이 매우 높은 싱크로율을 보였다. 분명 지금까지 밝히지 못한 미지의 기술이 담겨 있을 것이다.",
		condition = 0,
		bg = "3",
		blueprint_version = 3,
		sub_name = "소형 항목",
		label = "tag_blue",
		bg_icon = "gold_3",
		label_color = "tag_q",
		consume = {
			{
				1,
				1,
				5000
			},
			{
				2,
				17043,
				20
			}
		},
		drop_client = {
			{
				2,
				52022,
				1
			},
			{
				2,
				52003,
				1
			}
		}
	},
	[1224] = {
		id = 1224,
		rarity = 3,
		time = 1800,
		type = 2,
		name = "H-060-UL",
		lv_limit = 30,
		desc = "상부에서 극비사항으로 분류되는 연구 프로젝트. 이로 인해 인류뿐만 아니라, 전세계의 생태계 자체에 상당한 영향이 갈지도 모른다.",
		condition = 0,
		bg = "3",
		blueprint_version = 3,
		sub_name = "소형 항목",
		label = "tag_blue",
		bg_icon = "gold_3",
		label_color = "tag_sh",
		consume = {
			{
				1,
				1,
				8000
			},
			{
				2,
				20001,
				3
			}
		},
		drop_client = {
			{
				2,
				52021,
				1
			},
			{
				2,
				54051,
				1
			},
			{
				2,
				15008,
				1
			}
		}
	},
	[1225] = {
		id = 1225,
		rarity = 3,
		time = 1800,
		type = 2,
		name = "H-060-UL",
		lv_limit = 30,
		desc = "상부에서 극비사항으로 분류되는 연구 프로젝트. 이로 인해 인류뿐만 아니라, 전세계의 생태계 자체에 상당한 영향이 갈지도 모른다.",
		condition = 0,
		bg = "3",
		blueprint_version = 3,
		sub_name = "소형 항목",
		label = "tag_blue",
		bg_icon = "gold_3",
		label_color = "tag_sh",
		consume = {
			{
				1,
				1,
				8000
			},
			{
				2,
				20001,
				3
			}
		},
		drop_client = {
			{
				2,
				52021,
				1
			},
			{
				2,
				54051,
				1
			},
			{
				2,
				15008,
				1
			}
		}
	},
	[1226] = {
		id = 1226,