.String("organizationID", req.OrganizationId),
				zap.String("email", req.Email),
			)...,
		)
		return nil, err
	}
	updatedAccountPb, err := s.updateAccountV2MySQL(ctx, editor, commands, req.Email, req.OrganizationId)
	if err != nil {
		if errors.Is(err, v2as.ErrAccountNotFound) || errors.Is(err, v2as.ErrAccountUnexpectedAffectedRows) {
			dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{
				Locale:  localizer.GetLocale(),
				Message: localizer.MustLocalize(locale.NotFoundError),
			})
			if err != nil {
				return nil, statusInternal.Err()
			}
			return nil, dt.Err()
		}
		s.logger.Error(
			"Failed to update account",
			log.FieldsFromIncomingContext(ctx).AddFields(
				zap.Error(err),
				zap.String("organizationID", req.OrganizationId),
				zap.String("email", req.Email),
			)...,
		)
		return nil, api.NewGRPCStatus(err).Err()
	}
	// Upsert tags
	if req.ChangeTagsCommand != nil {
		for _, envRole := range updatedAccountPb.EnvironmentRoles {
			if err := s.upsertTags(ctx, req.ChangeTagsCommand.Tags, envRole.EnvironmentId); err != nil {
				s.logger.Error(
					"Failed to upsert account tags",
					log.FieldsFromIncomingContext(ctx).AddFields(
						zap.Error(err),
						zap.String("organizationId", req.OrganizationId),
						zap.String("environmentId", envRole.EnvironmentId),
						zap.String("email", updatedAccountPb.Email),
						zap.Strings("tags", req.ChangeTagsCommand.Tags),
					)...,
				)
				return nil, api.NewGRPCStatus(err).Err()
			}
		}
	}
	return &accountproto.UpdateAccountV2Response{
		Account: updatedAccountPb,
	}, nil
}

// checkRestrictedCommands checks if the request contains any restricted values changed
// and returns a permission denied error if it does
func (s *AccountService) checkRestrictedCommands(
	req *accountproto.UpdateAccountV2Request,
	localizer locale.Localizer,
) error {
	if req.ChangeOrganizationRoleCommand != nil ||
		req.OrganizationRole != nil {
		dt, err := statusPermissionDenied.WithDetails(&errdetails.LocalizedMessage{
			Locale:  localizer.GetLocale(),
			Message: localizer.MustLocalize(locale.PermissionDenied),
		})
		if err != nil {
			return statusInternal.Err()
		}
		return dt.Err()
	}
	return nil
}

func (s *AccountService) updateAccountV2NoCommand(
	ctx context.Context,
	req *accountproto.UpdateAccountV2Request,
	localizer locale.Localizer,
	editor *eventproto.Editor,
) (*accountproto.UpdateAccountV2Response, error) {
	err := validateUpdateAccountV2NoCommandRequest(req, localizer)
	if err != nil {
		return nil, err
	}
	updatedAccountPb, err := s.updateAccountV2NoCommandMysql(
		ctx,
		editor,
		req.Email,
		req.OrganizationId,
		req.Name,
		req.FirstName,
		req.LastName,
		req.Language,
		req.AvatarImageUrl,
		req.Avatar,
		req.Tags,
		req.TeamChanges,
		req.OrganizationRole,
		req.EnvironmentRoles,
		req.Disabled,
	)
	if err != nil {
		if errors.Is(err, v2as.ErrAccountNotFound) || errors.Is(err, v2as.ErrAccountUnexpectedAffectedRows) {
			dt, err := statusNotFound.WithDetails(&errdetails.LocalizedMessage{
				Locale:  localizer.GetLocale(),
				Message: localizer.MustLocalize


tion_commentlist}

{lang collection_followlist}

$follower[username]

{lang no_content}

$multipage

						{lang debate_square}
							{lang debate_opponent}
							{lang debate_neutral}

							{lang debate_support} $post[voters]


))));
    return elevationAdjustment;
  }

  /**
   * Adjusts the zenith of astronomical sunrise and sunset to account for solar refraction, solar radius and
   * elevation. The value for Sun's zenith and true rise/set Zenith (used in this class and subclasses) is the angle
   * that the center of the Sun makes to a line perpendicular to the Earth's surface. If the Sun were a point and the
   * Earth were without an atmosphere, true sunset and sunrise would correspond to a 90° zenith. Because the Sun
   * is not a point, and because the atmosphere refracts light, this 90° zenith does not, in fact, correspond to
   * true sunset or sunrise, instead the centre of the Sun's disk must lie just below the horizon for the upper edge
   * to be obscured. This means that a zenith of just above 90° must be used. The Sun subtends an angle of 16
   * minutes of arc (this can be changed via the {@link #setSolarRadius(double)} method , and atmospheric refraction
   * accounts for 34 minutes or so (this can be changed via the {@link #setRefraction(double)} method), giving a total
   * of 50 arcminutes. The total value for ZENITH is 90+(5/6) or 90.8333333° for true sunrise/sunset. Since a
   * person at an elevation can see blow the horizon of a person at sea level, this will also adjust the zenith to
   * account for elevation if available. Note that this will only adjust the value if the zenith is exactly 90 degrees.
   * For values below and above this no correction is done. As an example, astronomical twilight is when the sun is
   * 18° below the horizon or {@link AstronomicalCalendar#ASTRONOMICAL_ZENITH 108°
   * below the zenith}. This is traditionally calculated with none of the above mentioned adjustments. The same goes
   * for various tzais and alos times such as the
   * {@link ZmanimCalendar#ZENITH_16_POINT_1 16.1°} dip used in
   * {@link ComplexZmanimCalendar#getAlos16Point1Degrees()}.
   *
   * @param zenith
   *            the azimuth below the vertical zenith of 90°. For sunset typically the {@link #adjustZenith
   *            zenith} used for the calculation uses geometric zenith of 90° and {@link #adjustZenith adjusts}
   *            this slightly to account for solar refraction and the sun's radius. Another example would be
   *            {@link AstronomicalCalendar#getEndNauticalTwilight()} that passes
   *            {@link AstronomicalCalendar#NAUTICAL_ZENITH} to this method.
   * @param elevation
   *            elevation in Meters.
   * @return The zenith adjusted to include the {@link #getSolarRadius sun's radius}, {@link #getRefraction
     *         refraction} and {@link #getElevationAdjustment elevation} adjustment. This will only be adjusted for
   *         sunrise and sunset (if the zenith == 90°)
   * @see #getElevationAdjustment(double)
   */
  public adjustZenith(zenith: number, elevation: number) {
    let adjustedZenith: number = zenith;
    if (zenith === AstronomicalCalculator.GEOMETRIC_ZENITH) { // only adjust if it is exactly sunrise or sunset
      adjustedZenith = zenith + (this.getSolarRadius() + this.getRefraction() + this.getElevationAdjustment(elevation));
    }
    return adjustedZenith;
  }

  /**
   * Method to get the refraction value to be used when calculating sunrise and sunset. The default value is 34 arc
   * minutes. The Errata and
   * Notes for Calendrical Calculations: The Millennium Edition by Edward


private OfflinePlayerCache() {}

	public static OfflinePlayerCache getInstance(){
		if (instance == null) {
			synchronized (OfflinePlayerCache.class) {
				if (instance == null) {
					instance = new OfflinePlayerCache();

					// Populate our cache.
					for (OfflinePlayer offlinePlayer : Bukkit.getOfflinePlayers() ) {
						if (offlinePlayer.getUniqueId() != null && offlinePlayer.getName() != null) {
							instance.forcePutMatch(offlinePlayer.getName(), offlinePlayer.getUniqueId());
						}
					}
				}
			}
		}
		return instance;
	}

	/**
	 * Called from our PlayerLoginEvent to keep our cache up to date.
	 * Name and UUID are unique. A name will only map to a current known UUID.
	 *
	 * @param name	Player name.
	 * @param id	UUID of the Player.
	 */
	public void forcePutMatch(String name, UUID id) {

		nameUUID.forcePut(name.toLowerCase(), id);
	}

	/**
	 * Search the cache for a UUID which pairs with this name.
	 *
	 * @param name	a Players name to search for a UUID match.
	 * @return  UUID of a known OfflinePlayer or null.
	 */
	public UUID getPlayerUUID(String name) {

		return nameUUID.get(name.toLowerCase());
	}

	/**
	 * Search the cache for a name which pairs with this UUID.
	 *
	 * @param id	a Players UUID to search for a name match.
	 * @return	Name of a known OfflinePlayer or null.
	 */
	public String getPlayerName(UUID id) {

		return nameUUID.inverse().get(id);
	}

	public int size() {

		return nameUUID.size();
	}
}
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.6-b27-fcs
// See http://java.sun.com/xml/jaxb
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.06.11 at 10:34:16 AM PDT
//

package com.sun.identity.wsfederation.jaxb.wsspolicy;

/**
 * 7.1 AlgorithmSuite Assertion
 *
 * Java content class for TripleDesSha256Rsa15 element declaration.
 *
The following schema fragment specifies the expected content contained within this java content object. (defined at file:/Users/allan/A-SVN/trunk/opensso/products/federation/library/xsd/wsfederation/ws-securitypolicy-1.2.xsd line 654)
 *

 *

 * <element name="TripleDesSha256Rsa15" type="{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512}QNameAssertionType"/>
 *

 *
 */
public interface TripleDesSha256Rsa15Element
    extends javax.xml.bind.Element, com.sun.identity.wsfederation.jaxb.wsspolicy.QNameAssertionType
{

}
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v1.0.6-b27-fcs
// See http://java.sun.com/xml/jaxb
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.06.11 at 10:34:16 AM PDT
//

package com.sun.identity.wsfederation.jaxb.wsspolicy;

/**
 * 5.3.7 SecureConversationToken Assertion
 *
 * Java content class for SecureConversationToken element declaration.
 *
The following schema fragment specifies the expected conten


 fileMap (which must
// already be partially populated) has its "parts" field populated,
// and then fileMap is uploaded (if necessary).
// If no file blob is found, a zero blob.Ref (and no error) is returned.
func (c *Client) fileMapFromDuplicate(ctx context.Context, fileMap *schema.Builder, wholeRef []blob.Ref) (blob.Ref, error) {
	dupFileRef, err := c.SearchExistingFileSchema(ctx, wholeRef...)
	if err != nil {
		return blob.Ref{}, err
	}
	if !dupFileRef.Valid() {
		// because SearchExistingFileSchema returns blob.Ref{}, nil when file is not found.
		return blob.Ref{}, nil
	}
	dupMap, err := c.FetchSchemaBlob(ctx, dupFileRef)
	if err != nil {
		return blob.Ref{}, fmt.Errorf("could not find existing file blob for wholeRef %q: %v", wholeRef, err)
	}
	fileMap.PopulateParts(dupMap.PartsSize(), dupMap.ByteParts())
	json, err := fileMap.JSON()
	if err != nil {
		return blob.Ref{}, fmt.Errorf("could not write file map for wholeRef %q: %v", wholeRef, err)
	}
	bref := blob.RefFromString(json)
	if bref == dupFileRef {
		// Unchanged (same filename, modtime, JSON serialization, etc)
		// Different signer (e.g. existing file has a sha1 signer, and
		// we're now using a sha224 signer) means we upload a new file schema.
		return dupFileRef, nil
	}
	sbr, err := c.ReceiveBlob(ctx, bref, strings.NewReader(json))
	if err != nil {
		return blob.Ref{}, err
	}
	return sbr.Ref, nil
}
/*
Copyright 2012 The Perkeep Authors

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.
*/

package schema

import (
	"bytes"
	"errors"
	"fmt"
	"io"
	"math/rand"
	"sort"
	"sync"
	"testing"

	"perkeep.org/pkg/blob"
	"perkeep.org/pkg/blobserver/stats"
	"perkeep.org/pkg/test"
)

func TestWriteFileMap(t *testing.T) {
	m := NewFileMap("test-file")
	r := &randReader{seed: 123, length: 5 << 20}
	sr := new(stats.Receiver)
	var buf bytes.Buffer
	br, err := WriteFileMap(ctxbg, sr, m, io.TeeReader(r, &buf))
	if err != nil {
		t.Fatal(err)
	}
	t.Logf("Got root file %v; %d blobs, %d bytes", br, sr.NumBlobs(), sr.SumBlobSize())
	sizes := sr.Sizes()
	t.Logf("Sizes are %v", sizes)

	// TODO(bradfitz): these are fragile tests and mostly just a placeholder.
	// Real tests to add:
	//   -- no "bytes" schema with a single "blobref"
	//   -- more seeds (including some that tickle the above)
	//   -


:   {0}", actual);
                }
                return;
            }

            rect = new Rect();
            actual = SetRWith(ref rect, value, property);
            if (MathEx.NotEquals(value, actual) || failOnPurpose)
            {
                AddFailure("set_" + property + " failed");
                Log("*** Expected: {0}", value);
                Log("*** Actual:   {0}", actual);
            }

            rect = new Rect(11.11, 22.22, 11.11, 22.22);
            actual = SetRWith(ref rect, value, property);
            if (MathEx.NotEquals(value, actual) || failOnPurpose)
            {
                AddFailure("set_" + property + " failed");
                Log("*** Expected: {0}", value);
                Log("*** Actual:   {0}", actual);
            }

        }

        private Size SetRWith(ref Rect rect, Size value, string property)
        {
            switch (property)
            {
                case "Size": rect.Size = value; return rect.Size;
            }
            throw new ApplicationException("Invalid property: " + property + " cannot be set on Rect");
        }

        private void TestToString()
        {
            Log("Testing ToString...");

            TestToStringWith(Rect.Empty);
            TestToStringWith(new Rect());
            TestToStringWith(new Rect(11.11, 22.22, 0, 0));
            TestToStringWith(new Rect(11.11, 22.22, 0, 22.22));
            TestToStringWith(new Rect(11.11, 22.22, 11.11, 0));
            TestToStringWith(new Rect(0, 0, 11.11, 22.22));
            TestToStringWith(new Rect(-11.11, -22.22, 11.11, 22.22));
        }

        private void TestToStringWith(Rect rect)
        {
            string theirAnswer = rect.ToString();

            // Don't want these to be affected by locale yet
            string myX = rect.X.ToString(CultureInfo.InvariantCulture);
            string myY = rect.Y.ToString(CultureInfo.InvariantCulture);
            string myWidth = rect.Width.ToString(CultureInfo.InvariantCulture);
            string myHeight = rect.Height.ToString(CultureInfo.InvariantCulture);

            // ... Because of this
            string myAnswer = myX + _sep + myY + _sep + myWidth + _sep + myHeight;
            if (rect.IsEmpty)
            {
                myAnswer = "Empty";
            }
            else
            {
                myAnswer = MathEx.ToLocale(myAnswer, CultureInfo.CurrentCulture);
            }

            if (!MathEx.EqualsIgnoringSeparators(theirAnswer,myAnswer) || failOnPurpose)
            {
                AddFailure("ToString() failed");
                Log("*** Expected = {0}", myAnswer);
                Log("*** Actual   = {0}", theirAnswer);
            }

            theirAnswer = rect.ToString(CultureInfo.CurrentCulture);

            if (!MathEx.EqualsIgnoringSeparators(theirAnswer,myAnswer) || failOnPurpose)
            {
                AddFailure("ToString( IFormatProvider ) failed");
                Log("*** Expected = {0}", myAnswer);
                Log("*** Actual   = {0}", theirAnswer);
            }
        }

        private void TestTransform()
        {
            Log("Testing Transform...");

            TestTransformWith(Rect.


e tags
tag:
  - Storage
  - Guide
  - "302"
# this page is sticky in article list
sticky: true
# this page will appear in starred articles
star: true
---

# Yandex云盘

### **刷新令牌**
[点击这里](https://oauth.yandex.com/authorize?response_type=code&client_id=a78d5a69054042fa936f6c77f9a0ae8b) 来获取刷新令牌。

### **根文件夹ID**
要挂载的根文件夹，默认为 `/`

### **默认使用的下载方式**

```mermaid
---
title: 默认使用的哪种下载方式？
---
flowchart TB
    style a1 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
    style a2 fill:#ff7575,stroke:#333,stroke-width:4px
    subgraph ide1 [ ]
    a1
    end
    a1[302]:::someclass====|默认|a2[用户设备]
    classDef someclass fill:#f96
    c1[本机代理]-.备选.->a2[用户设备]
    b1[代理URL]-.备选.->a2[用户设备]
    click a1 "../drivers/common.html#webdav-策略"
    click b1 "../drivers/common.html#webdav-策略"
    click c1 "../drivers/common.html#webdav-策略"
```---
# This is the icon of the page
icon: iconfont icon-state
# This control sidebar order
order: 181
# A page can have multiple categories
category:
  - Guide
# A page can have multiple tags
tag:
  - Storage
  - Guide
  - "302"
# this page is sticky in article list
sticky: true
# this page will appear in starred articles
star: true
---
# 地址树

:::tip
**`地址树-UrlTree`** 是什么?  是用来挂载单个文件链接的，详情可以查看  **→→→[原需求说明](https://github.com/alist-org/alist/issues/3268)←←←**
:::

## **可写** <Badge text="≥ 3.42.0" type="info" vertical="middle" />

打开后可以对此驱动进行`新建文件夹`、`移动`、`重命名`、`复制`、`删除`、`PutURL`

- 当用户在实现该接口的驱动中尝试使用SimpleHttp进行离线下载时，将不会调用离线下载工具。 相反，将调用驱动程序的 `PutURL` 方法。
- **https://github.com/AlistGo/alist/pull/7779**

<br/>

## **用法**

具体的用法大概讲解一下，建议将下面不同用法都看看越往后越进阶玩法

别看写的看起来很难很啰嗦实际上自己操作一下秒懂。

:::tabs#UrlTree
@tab 1

<Badge text="1" type="info" vertical="middle" />最简单的用法，直接写链接即可

##### 输入

```
http://pic.rmb.bdstatic.com/bjh/aff9c9c8817d943d6857a73188958d45.jpeg
https://raw.githubusercontent.com/alist-org/alist/main/README_cn.md
```

##### 输


150/0`, "bug in test")
	st.fails(`^stCallCodes/call_OOG_additionalGasCosts1.json/EIP150/0`, "bug in test")
	st.fails(`^stWalletTest/walletChangeRequirementRemovePendingTransaction.json/EIP150/0`, "bug in test")
	st.fails(`^stWalletTest/walletChangeOwnerRemovePendingTransaction.json/EIP150/0`, "bug in test")
	st.fails(`^stWalletTest/walletConfirm.json/EIP150/0`, "bug in test")
	st.fails(`^stWalletTest/walletAddOwnerRemovePendingTransaction.json/EIP150/0`, "bug in test")
	st.fails(`^stWalletTest/multiOwnedRemoveOwnerByNonOwner.json/EIP150/0`, "bug in test")
	st.fails(`^stAttackTest/CrashingTransaction.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsNotEnoughGasBefore.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAt.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsNotEnoughGasAfter.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsBefore.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/UserTransactionZeroCostWithData.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/UserTransactionZeroCostWithData.json/EIP150/1`, "bug in test")
	st.fails(`^stTransactionTest/UserTransactionZeroCost.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/UserTransactionGasLimitIsTooLowWhenZeroCost.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/TransactionToItselfNotEnoughFounds.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsAt.json/EIP150/0`, "bug in test")
	st.fails(`^stTransitionTest/createNameRegistratorPerTxsAfter.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/TransactionSendingToEmpty.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/TransactionNonceCheck2.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/TransactionNonceCheck.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/TransactionDataCosts652.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/RefundOverflow2.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/RefundOverflow.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/OverflowGasRequire2.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/EmptyTransaction3.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/EmptyTransaction2.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/EmptyTransaction.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/CreateTransactionSuccess.json/EIP150/0`, "bug in test")
	st.fails(`^stTransactionTest/CreateTransactionReverted.json/E


ut_nodes = node.outlinks;
      if (in_vars_name.size() > in_nodes.size() ||
          out_vars_name.size() > out_nodes.size()) {
        continue;
      }

      bool matched = true;
      for (auto in_var_name : in_vars_name) {
        bool find_var = false;
        for (auto* in_node : in_nodes) {
          if (in_node->arg()->name == in_var_name) {
            find_var = true;
            break;
          }
        }
        if (!find_var) {
          matched = false;
          break;
        }
      }

      for (auto out_var_name : out_vars_name) {
        bool find_var = false;
        for (auto* out_node : out_nodes) {
          if (out_node->arg()->name == out_var_name) {
            find_var = true;
            break;
          }
        }
        if (!find_var) {
          matched = false;
          break;
        }
      }

      if (matched) {
        buffer_nodes.insert(&node);
      }
    }
  }
  return buffer_nodes;
}

void OpenCLMemoryObjectConfigPass::CorrectArgumentPlace(SSAGraph* graph) {
  for (auto& x : graph->StmtTopologicalOrder()) {
    auto& inst = x->AsStmt();
    // deal with inputs
    VLOG(4) << "checking op " << inst.op_info()->Repr();

    std::string op_type = inst.op_type();
    const auto op = inst.op();
    const auto* op_info = inst.op_info();
    auto* scope = op->scope();
    bool change_image2d_to_buffer = false;
    bool change_image2d_to_cpu = false;

    auto get_argname = [&](
        const std::string& node_name,
        const std::map<std::string, std::vector<std::string>>& argname_map)
        -> std::string {
          for (auto& ele : argname_map) {
            auto it =
                std::find(ele.second.begin(), ele.second.end(), node_name);
            if (it != ele.second.end()) return ele.first;
          }
          return "";
        };

    // 1. op unsupport persistable
    const std::vector<std::string> op_cases_unsupport_persistable{
        "elementwise_floordiv",
        "elementwise_add",
        "elementwise_sub",
        "elementwise_mul",
        "elementwise_div",
        "elementwise_pow",
        "elementwise_mod",
        "reshape2",
        "unsqueeze2",
        "split"};
    if (std::find(op_cases_unsupport_persistable.begin(),
                  op_cases_unsupport_persistable.end(),
                  op_type) != op_cases_unsupport_persistable.end()) {
      for (std::list<Node*>::iterator i = x->inlinks.begin();
           i != x->inlinks.end();
           ++i) {
        std::string in_name =
            get_argname((*i)->AsArg().name, inst.op_info()->inputs());
        if (in_name == "X") {
          auto* var = scope->FindVar((*i)->arg()->name);
          if (var->Get<Tensor>().persistable()) change_image2d_to_cpu = true;
        }
      }
    }

    if (op_type == "slice") {
      for (std::list<Node*>::iterator i = x->inlinks.begin();
           i != x->inlinks.end();
           ++i) {
        std::string in_name =
            get_argname((*i)->AsArg().name, inst.op_info()->inputs());
        if (in_name == "Input") {
          auto* var = scope->FindVar((*i)->arg()->name);
          if (var->Get


(z.serverPools))
	dErrsByPool := make([][]error, len(z.serverPools))

	eg := errgroup.WithNErrs(len(z.serverPools)).WithConcurrency(len(z.serverPools))
	for i, pool := range z.serverPools {
		pool := pool
		eg.Go(func() error {
			dObjectsByPool[i], dErrsByPool[i] = pool.DeleteObjects(ctx, bucket, objects, opts)
			return nil
		}, i)
	}
	eg.Wait() // wait to check all the pools.

	for i := range dobjects {
		// Iterate over pools
		for pool := range z.serverPools {
			if dErrsByPool[pool][i] == nil && dObjectsByPool[pool][i].found {
				// A fast exit when the object is found and removed
				dobjects[i] = dObjectsByPool[pool][i]
				derrs[i] = nil
				break
			}
			if derrs[i] == nil {
				// No error related to this object is found, assign this pool result
				// whether it is nil because there is no object found or because of
				// some other errors such erasure quorum errors.
				dobjects[i] = dObjectsByPool[pool][i]
				derrs[i] = dErrsByPool[pool][i]
			}
		}
	}

	for i := range dobjects {
		dobjects[i].ObjectName = decodeDirObject(dobjects[i].ObjectName)
	}
	return dobjects, derrs
}

func (z *erasureServerPools) CopyObject(ctx context.Context, srcBucket, srcObject, dstBucket, dstObject string, srcInfo ObjectInfo, srcOpts, dstOpts ObjectOptions) (objInfo ObjectInfo, err error) {
	if err := checkCopyObjArgs(ctx, srcBucket, srcObject); err != nil {
		return ObjectInfo{}, err
	}
	if err := checkCopyObjArgs(ctx, dstBucket, dstObject); err != nil {
		return ObjectInfo{}, err
	}

	srcObject = encodeDirObject(srcObject)
	dstObject = encodeDirObject(dstObject)

	cpSrcDstSame := isStringEqual(pathJoin(srcBucket, srcObject), pathJoin(dstBucket, dstObject))

	if !dstOpts.NoLock {
		ns := z.NewNSLock(dstBucket, dstObject)
		lkctx, err := ns.GetLock(ctx, globalOperationTimeout)
		if err != nil {
			return ObjectInfo{}, err
		}
		ctx = lkctx.Context()
		defer ns.Unlock(lkctx)
		dstOpts.NoLock = true
	}

	poolIdx, err := z.getPoolIdxNoLock(ctx, dstBucket, dstObject, srcInfo.Size)
	if err != nil {
		return objInfo, err
	}

	if cpSrcDstSame && srcInfo.metadataOnly {
		// Version ID is set for the destination and source == destination version ID.
		if dstOpts.VersionID != "" && srcOpts.VersionID == dstOpts.VersionID {
			return z.serverPools[poolIdx].CopyObject(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts)
		}
		// Destination is not versioned and source version ID is empty
		// perform an in-place update.
		if !dstOpts.Versioned && srcOpts.VersionID == "" {
			return z.serverPools[poolIdx].CopyObject(ctx, srcBucket, srcObject, dstBucket, dstObject, srcInfo, srcOpts, dstOpts)
		}
		// Destination is versioned, source is not destination version,
		// as a special case look for if the source object is not legacy
		// from older format, for older format we will rewrite them as
		// newer using PutObject() - this is an optimization to save space
		if dstOpts.Versioned && srcOpts.VersionID != dstOpts.VersionID && !srcInfo.Legacy {
			// CopyObject optimization where we don't create an entire copy
			// of the content, ins


SqrtI := check.Equal(t0.Multiply(uNeg, sqrtM1))

	rPrime := new(Element).Multiply(rr, sqrtM1) // r_prime = SQRT_M1 * r
	// r = CT_SELECT(r_prime IF flipped_sign_sqrt | flipped_sign_sqrt_i ELSE r)
	rr.Select(rPrime, rr, flippedSignSqrt|flippedSignSqrtI)

	r.Absolute(rr) // Choose the nonnegative square root.
	return r, correctSignSqrt | flippedSignSqrt
}
// Code generated by Fiat Cryptography. DO NOT EDIT.
//
// Autogenerated: word_by_word_montgomery --lang Go --no-wide-int --cmovznz-by-mul --relax-primitive-carry-to-bitwidth 32,64 --internal-static --public-function-case camelCase --public-type-case camelCase --private-function-case camelCase --private-type-case camelCase --doc-text-before-function-name '' --doc-newline-before-package-declaration --doc-prepend-header 'Code generated by Fiat Cryptography. DO NOT EDIT.' --package-name fiat --no-prefix-fiat p224 64 '2^224 - 2^96 + 1' mul square add sub one from_montgomery to_montgomery selectznz to_bytes from_bytes
//
// curve description: p224
//
// machine_wordsize = 64 (from "64")
//
// requested operations: mul, square, add, sub, one, from_montgomery, to_montgomery, selectznz, to_bytes, from_bytes
//
// m = 0xffffffffffffffffffffffffffffffff000000000000000000000001 (from "2^224 - 2^96 + 1")
//
//
//
// NOTE: In addition to the bounds specified above each function, all
//
//   functions synthesized for this Montgomery arithmetic require the
//
//   input to be strictly less than the prime modulus (m), and also
//
//   require the input to be in the unique saturated representation.
//
//   All functions also ensure that these two properties are true of
//
//   return values.
//
//
//
// Computed values:
//
//   eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192)
//
//   bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216)
//
//   twos_complement_eval z = let x1 := z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) in
//
//                            if x1 & (2^256-1


wer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001500435-23-000054/gpro-20230601.htm",
		"cik": "1500435",
		"accessionNum": "000150043523000054",
		"ticker": "gpro",
		"dateString": "20230601",
		"formType": "DEFA14A",
		"factCount": 5
	},
	{
		"version": "2.2",
		"instance_file": "aurafatprojects_f4.htm",
		"link": "?doc=filings/0001829126-23-004008/aurafatprojects_f4.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/1901886/000182912623004008/aurafatprojects_f4.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/1901886/000182912623004008/aurafatprojects_f4.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001829126-23-004008/aurafatprojects_f4.htm",
		"cik": "1901886",
		"accessionNum": "000182912623004008",
		"docString": "aurafatprojects_f4",
		"formType": "F-4",
		"factCount": 782
	}
]export const extendedFilings = [
	{
		"version": "2.2",
		"instance_file": "uhal-20230331.htm",
		"link": "?doc=filings/0000004457-23-000052/uhal-20230331.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/4457/000000445723000052/uhal-20230331.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/4457/000000445723000052/uhal-20230331.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0000004457-23-000052/uhal-20230331.htm",
		"cik": "4457",
		"accessionNum": "000000445723000052",
		"ticker": "uhal",
		"dateString": "20230331"
	},
	{
		"version": "2.2",
		"instance_file": "aep-20230602.htm",
		"link": "?doc=filings/0000004904-23-000094/aep-20230602.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/4904/000000490423000094/aep-20230602.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/4904/000000490423000094/aep-20230602.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0000004904-23-000094/aep-20230602.htm",
		"cik": "4904",
		"accessionNum": "000000490423000094",
		"ticker": "aep",
		"dateString": "20230602"
	},
	{
		"version": "2.2",
		"instance_file": "s


ble.Tbl td.TblTdSrtCl1Lst {background-color:#E5E5E5}
table.Tbl th.TblTdSrtCl1Lst {background-color:#E5E5E5}
table.Tbl th.TblColHdrSrtSelCl1 {background-color:#E5E5E5;text-align:center;vertical-align:bottom}
table.Tbl td.TblTdSrtSelCl1 {background-color:#E5E5E5}
table.Tbl td.TblTdSrtSelCl1Lst {background-color:#E5E5E5}
table.Tbl th.TblColHdrSel {text-align:center;vertical-align:bottom}
table.Tbl td.TblTdSel {text-align:center;vertical-align:top}
table.Tbl td.TblTdSelLst {text-align:center;vertical-align:top}
table.Tbl th.TblTdSpc {}
table.Tbl td.TblTdSpc {}
table.Tbl td.TblTdSpcLst {}
table.Tbl td.TblTdAlm {background-color:#FFFEE7}
table.Tbl th.TblTdAlm {background-color:#FFFEE7}
table.Tbl td.TblTdAlmCl1 {background-color:#FFFEE7}
table.Tbl th.TblTdAlmCl1 {background-color:#FFFEE7}
table.Tbl td.TblTdAlmLst {background-color:#FFFEE7}
table.Tbl th.TblTdAlmLst {background-color:#FFFEE7}
table.Tbl td.TblTdAlmCl1Lst {background-color:#FFFEE7}
table.Tbl th.TblTdAlmCl1Lst {background-color:#FFFEE7}
table.Tbl td.TblTdSrtAlm {background-color:#FFFEE7}
table.Tbl th.TblTdSrtAlm {background-color:#FFFEE7}
table.Tbl td.TblTdSrtAlmLst {background-color:#FFFEE7}
table.Tbl th.TblTdSrtAlmLst {background-color:#FFFEE7}
a.TblHdrLnk:link, a.TblHdrLnk:visited {color:#3a2eb5;text-decoration:none;font-weight:bold}
a.TblNavLnk:link, a.TblNavLnk:visited {color:#3a2eb5;text-decoration:none}
a.TblActLnk:link, a.TblActLnk:visited {color:#3a2eb5;text-decoration:none}
.TblMsgTxt {color:#333}
.TblPgnTxtBld {color:#666;font-weight:bold}
.TblPgnTxt {color:#666}

/* MENUS */
/* Netscape 4 doesn't support setting colors on these */
.MnuJmp,.MnuJmpOpt,.MnuJmpOptSel,.MnuJmpOptSep,.MnuJmpOptDis,.MnuJmpOptGrp {}
.MnuStd,.MnuStdOpt,.MnuStdOptSel,.MnuStdOptSep,.MnuStdOptDis,.MnuStdOptGrp {}

/* LISTS */
/* Netscape 4 doesn't support setting colors on these */
.Lst,.LstOpt,.LstOptSel,.LstOptSep,.LstOptDis,.LstOptGrp,.LstDis {}
/* Contextual Selectors for Monospace Version */
.LstMno .LstOpt,.LstOptSel,.LstOptSep,.LstOptDis,.LstOptGrp {font-family:monospace}
.LstMnoDis .LstOpt,.LstOptSel,.LstOptSep,.LstOptDis,.LstOptGrp {font-family:monospace}

/* BUTTONS */
.Btn1, .Btn1Hov, .Btn1Dis, .Btn1Def, .Btn1DefHov {background:#CCC;color:#000


[] => {
    const freq = new Array(26).fill(0);
    for (let i = 0; i < input.length; i++) {
        freq[charOffset(input, i)] += 1;
    }
    return freq;
}

/**
 * Descending sort with highest occurances 1st
 */
const sortQ = (q, freq) => q.sort((a, b) => freq[charOffset(b, 0)] - freq[charOffset(a, 0)]);

/**
 * Uses a prioritized Q (non-optimized array we sort, highest frequency first).
 * Pops the 1st and 2nd and re-queues if the freq is non-zero.
 */
const rearrange = (input: string) => {
    let result: string = '';
    // Unique list of chars
    const charSet = new Set(input.split(''));

    // Frequency count of each uniq char
    const freq = countFreq(input);
    let q: string[] = sortQ(Array.from(charSet), freq);

    let prevChar = '';
    // Pop 1st (head) and 2nd (next) char as a pair
    while (q.length) {
        const headChar = q.shift();
        const nextChar = q.length ? q.shift() : undefined;

        // Decrement freq and push back if non-zero frequencies.
        // We will reprioritize the queue later.
        const pair = nextChar ? [headChar, nextChar] : [headChar];
        for (let i = 0; i < pair.length; i++) {
            const char = pair[i];
            // console.log('prev, current', prevChar, char);
            if (char === prevChar) {
                // No solution, since adjacent chars the same
                return null;
            }

            result += char;
            prevChar = char;
            const charFreqIdx = charOffset(char);
            freq[charFreqIdx] -= 1;
            if (freq[charFreqIdx] > 0) {
                q.push(char);
            }
        }

        // Re-prioritize the q
        q = sortQ(q, freq);
    }

    return result;
}

/**
 * ASSERTIONS
 */
console.log(countFreq('aaaa')[0] == 4);
console.log(rearrange('aab') === 'aba');
console.log(rearrange('abacc') === 'acbac');
console.log(rearrange('yyz') === 'yzy');
console.log(rearrange('yyy') === null);
function buildSummary(messages) {
  let playersCount = new Map();
  let topicsCount = new Map();
  messages.forEach(message => {
    const playerString = String(message.player);
    let currentPlayerCount = playersCount.has(playerString) ? playersCount.get(playerString) : 0;
    playersCount.set(playerString, ++currentPlayerCount);
    message.topics.forEach(topicObject => {
      const topicString = String(topicObject.topic);
      let currentTopicCount = topicsCount.has(topicString) ? topicsCount.get(topicString) : 0;
      topicsCount.set(topicString, ++currentTopicCount);
    });
  });

  const totalNumberOfMessages = messages.length;
  const totalNumberOfTopicsOccurrences = Array.from(topicsCount.values()).reduce((a, b) => a + b, 0);
  let summary = {
    totalNumberOfMessages: totalNumberOfMessages,
    totalNumberOfPlayers: playersCount.size,
    totalNumberOfTopics: topicsCount.size,
    totalNumberOfTopicsOccurrences: totalNumberOfT


 seconda, faccio avere un match solo con la prima
		valoreNonCorrettoInt = "50"; // ha un match con entrambe le regole

		// *** Test1: corretto ***

		tipoTest.add("OK-1");
		complexTypeTest.add("one_of");
		pathTest.add(valoreCorretto1);
		queryTest.add(valoreCorretto1);
		headerTest.add(valoreCorretto1);
		cookieTest.add(valoreCorretto1);
		pathInLineTest.add(valoreCorrettoInt1);
		queryInLineTest.add(valoreCorrettoInt1);
		headerInLineTest.add(valoreCorrettoInt1);
		cookieInLineTest.add(valoreCorrettoInt1);
		erroreAttesoRichiestaTest.add(false);
		erroreAttesoRispostaTest.add(false);
		msgErroreAttesoTest_openapi4j.add(null);
		msgErroreAttesoTest_swagger_request.add(null);
		msgErroreAttesoTest_swagger_response.add(null);
		msgErroreAttesoTest_json_schema.add(null);

		tipoTest.add("ERRORE-PATH-1");
		complexTypeTest.add("one_of");
		pathTest.add(valoreNonCorretto1);
		queryTest.add(valoreCorretto1);
		headerTest.add(valoreCorretto1);
		cookieTest.add(valoreCorretto1);
		pathInLineTest.add(valoreCorrettoInt1);
		queryInLineTest.add(valoreCorrettoInt1);
		headerInLineTest.add(valoreCorrettoInt1);
		cookieInLineTest.add(valoreCorrettoInt1);
		erroreAttesoRichiestaTest.add(true);
		erroreAttesoRispostaTest.add(false);
		msgErroreAttesoTest_openapi4j.add("composed_schema_one_of_path: More than 1 schema is valid. (code: 1023)\n"
				+ "From: composed_schema_one_of_path.<oneOf>");
		msgErroreAttesoTest_json_schema.add("Invalid value '"+valoreNonCorretto1+"' in dynamic path 'composed_schema_one_of_path': expected validates the value against exactly one of the subschemas; founded valid in 2 schemas");
		msgErroreAttesoTest_swagger_request.add(msgErroreAttesoTest_json_schema.get(msgErroreAttesoTest_json_schema.size()-1));
		msgErroreAttesoTest_swagger_response.add(null);

		tipoTest.add("ERRORE-PATH-INLINE-1");
		complexTypeTest.add("one_of");
		pathTest.add(valoreCorretto1);
		queryTest.add(valoreCorretto1);
		headerTest.add(valoreCorretto1);
		cookieTest.add(valoreCorretto1);
		pathInLineTest.add(valoreNonCorrettoInt);
		queryInLineTest.add(valoreCorrettoInt1);
		headerInLineTest.add(valoreCorrettoInt1);
		cookieInLineTest.add(valoreCorrettoInt1);
		erroreAttesoRichiestaTest.add(true);
		erroreAttesoRispostaTest.add(false);
		msgErroreAttesoTest_openapi4j.add("composed_schema_one_of_path_inline: More than 1 schema is valid. (code: 1023)\n"
				+ "From: composed_schema_one_of_path_inline.<oneOf>");
		msgErroreAttesoTest_json_schema.add("Invalid value '"+valoreNonCorrettoInt+"' in dynamic path 'composed_schema_one_of_path_inline': expected validates the value against exactly one of the subschemas; founded valid


gantt_open,
.gantt_drag_marker .gantt_tree_icon.gantt_close {
  display: none;
}
.gantt_drag_marker,
.gantt_drag_marker .gantt_row.odd {
  background-color: #FFFFFF;
}
.gantt_drag_marker .gantt_row {
  border-left: 1px solid #bebebe;
  border-top: 1px solid #bebebe;
}
.gantt_drag_marker .gantt_cell {
  border-color: #bebebe;
}
.gantt_row.gantt_over,
.gantt_task_row.gantt_over {
  background-color: #0070fe;
}
.gantt_row.gantt_transparent .gantt_cell {
  opacity: 0.7;
}
.gantt_task_row.gantt_transparent {
  background-color: #ffffff;
}
.gantt_popup_button.gantt_delete_button {
  background-color: #448AFF;
  color: #FFFFFF;
}
.gantt_container_resize_watcher {
  background: transparent;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  z-index: -1;
  pointer-events: none;
  border: 0;
  box-sizing: border-box;
  opacity: 0;
}

/*!
 * Bootstrap v4.3.1 (https://getbootstrap.com/)
 * Copyright 2011-2019 The Bootstrap Authors
 * Copyright 2011-2019 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
:root {
  --blue: #007bff;
  --indigo: #6610f2;
  --purple: #6f42c1;
  --pink: #e83e8c;
  --red: #dc3545;
  --orange: #fd7e14;
  --yellow: #ffc107;
  --green: #28a745;
  --teal: #20c997;
  --cyan: #17a2b8;
  --white: #fff;
  --gray: #6c757d;
  --gray-dark: #343a40;
  --primary: #007bff;
  --secondary: #6c757d;
  --success: #28a745;
  --info: #17a2b8;
  --warning: #ffc107;
  --danger: #dc3545;
  --light: #f8f9fa;
  --dark: #343a40;
  --breakpoint-xs: 0;
  --breakpoint-sm: 576px;
  --breakpoint-md: 768px;
  --breakpoint-lg: 992px;
  --breakpoint-xl: 1200px;
  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }

*,
*::before,
*::after {
  -webkit-box-sizing: border-box;
  box-sizing: border-box; }

html {
  font-family: sans-serif;
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }

article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
  display: block; }

body {
  margin: 0;
  font-


/*
 * Copyright 2021 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrYUVATextureProxies_DEFINED
#define GrYUVATextureProxies_DEFINED

#include "include/core/SkYUVAInfo.h"
#include "src/core/SkYUVAInfoLocation.h"
#include "src/gpu/ganesh/GrSurfaceProxy.h"
#include "src/gpu/ganesh/GrSurfaceProxyView.h"

class GrSurfaceProxyView;

class GrYUVATextureProxies {
public:
    GrYUVATextureProxies() = default;

    /** Assumes all planes are sampled with a default "rgba" swizzle. */
    GrYUVATextureProxies(const SkYUVAInfo&,
                         sk_sp<GrSurfaceProxy>[SkYUVAInfo::kMaxPlanes],
                         GrSurfaceOrigin textureOrigin);

    /**
     * When uploading pixmaps to textures it is important that we account for how the original
     * pixmaps' channels are swizzled into the texture during upload. This will compute a swizzle
     * for each texture based on the original color types and the views' swizzles. The views must
     * all have the same origin or the result will be an invalid GrYUVATextureProxies.
     */
    GrYUVATextureProxies(const SkYUVAInfo&,
                         GrSurfaceProxyView[SkYUVAInfo::kMaxPlanes],
                         GrColorType[SkYUVAInfo::kMaxPlanes]);

    GrYUVATextureProxies(const GrYUVATextureProxies&) = default;
    GrYUVATextureProxies(GrYUVATextureProxies&&) = default;

    GrYUVATextureProxies& operator=(const GrYUVATextureProxies&) = default;
    GrYUVATextureProxies& operator=(GrYUVATextureProxies&&) = default;

    const SkYUVAInfo& yuvaInfo() const { return fYUVAInfo; }

    int numPlanes() const { return fYUVAInfo.numPlanes(); }

    GrSurfaceOrigin textureOrigin() const { return fTextureOrigin; }

    // Overall set of YUVA proxies is mip mapped if each plane is mip mapped.
    GrMipmapped mipmapped() const { return fMipmapped; }

    GrSurfaceProxy* proxy(int i) const { return fProxies[i].get(); }

    const std::array<sk_sp<GrSurfaceProxy>, SkYUVAInfo::kMaxPlanes>& proxies() const {
        return fProxies;
    }

    sk_sp<GrSurfaceProxy> refProxy(int i) const { return fProxies[i]; }

    GrSurfaceProxyView makeView(int i) const {
        return {fProxies[i], fTextureOrigin, skgpu::Swizzle::RGBA()};
    }

    bool isValid() const { return fYUVAInfo.isValid(); }

    const SkYUVAInfo::YUVALocations& yuvaLocations() const { return fYUVALocations; }

private:
    std::array<sk_sp<GrSurfaceProxy>, SkYUVAInfo::kMaxPlanes> fProxies;
    SkYUVAInfo fYUVAInfo;
    GrSurfaceOrigin fTextureOrigin = kTopLeft_GrSurfaceOrigin;
    GrMipmapped fMipmapped = GrMipmapped::kNo;
    SkYUVAInfo::YUVALocations fYUVALocations = {};
};

#endif


     // add all bands in msk to vrt
  ASSERT_EQ( vrt.numBands(), refNumBands);      // must be five due to previous tests
  ASSERT_EQ( vrt.dtype(5), GDT_Byte);           // must be uint8_t as per previous test

  for (uint b=1; b<=vrt.numBands(); ++b)        // for each 1-indexed band
    for (uint l=0; l<vrt.length(); ++l)         // for each 0-indexed line
      for (uint c=0; c<vrt.width(); ++c) {      // for each 0-indexed cols
        val = NAN;
        vrt.getValue ( val, c, l, b );          // get value for each pixel
        ASSERT_EQ( std::isfinite(val), true);   // value must be finite
      }
}

TEST_F(RasterTest, pushBack) {

  std::remove(latFilename.c_str());
  std::remove(lonFilename.c_str());

  isce3::io::Raster lat = isce3::io::Raster( latFilename, nc, nl, 1, GDT_Float32, "GTiff" );
  isce3::io::Raster lon = isce3::io::Raster( lonFilename, nc, nl, 1, GDT_Float64, "VRT" );

  std::vector<isce3::io::Raster> v;
  v.push_back(lat);
  v.push_back(lon);
}

// Main
int main( int argc, char * argv[] ) {
    testing::InitGoogleTest( &argc, argv );
    return RUN_ALL_TESTS();
}

// end of file

#include <iostream>
#include <cstdio>
#include <sstream>
#include <fstream>
#include <cmath>
#include <complex>
#include <gtest/gtest.h>

#include "isce3/io/Raster.h"
#include <isce3/io/IH5.h>
#include <isce3/product/Serialization.h>
#include <isce3/product/RadarGridProduct.h>

#include "isce3/cuda/signal/gpuSignal.h"
#include "isce3/cuda/signal/gpuFilter.h"

using isce3::core::avgLUT2dToLUT1d;

TEST(Filter, constructAzimuthCommonbandFilter)
{
    //This test constructs a common azimuth band filter.

    int ncols = 500;
    int blockRows = 500;

    std::valarray<std::complex<float>> refSlc(ncols*blockRows);

    // Get some metadata from an existing HDF5 file
    std::string h5file(TESTDATA_DIR "envisat.h5");

    // an HDF5 object
    isce3::io::IH5File file(h5file);

    // Create a product and swath
    isce3::product::RadarGridProduct product(file);
    const isce3::product::Swath & swath = product.swath('A');

    // Get the Doppler polynomial and use it for both reference and secondary SLCs
    isce3::core::LUT1d<double> dop1 =
        avgLUT2dToLUT1d<double>(product.metadata().procInfo().dopplerCentroid('A'));
    isce3::core::LUT1d<double> dop2 = dop1;

    // get pulase repetition frequency (prf)
    double prf = swath.nominalAcquisitionPRF();
    std::cout << "prf: " << std::setprecision(16)<< prf << std::endl;

    // beta parameter for the raised cosine filter used for constructing the common azimuth band filter
    double beta = 0.25;

    // desired common azimuth band
    double commonAzimuthBandwidth = 1000.0;

    isce3::cuda::signal::gpuAzimuthFilter<float> az_filter;
    az_filter.constructAzimuthCommonbandFilter(dop1,


(const)
//Requires: caml_callback, caml_js_function_arity
function caml_js_wrap_meth_callback_unsafe(f) {
  return function () {
    var len = caml_js_function_arity(f) - 1;
    var args = new Array(len + 1);
    args[0] = this;
    for (var i = 0; i < len; i++) args[i + 1] = arguments[i];
    return caml_callback(f, args);
  };
}

//Provides: caml_js_function_arity
//If: !effects
function caml_js_function_arity(f) {
  return f.l >= 0 ? f.l : (f.l = f.length);
}

//Provides: caml_js_function_arity
//If: effects
function caml_js_function_arity(f) {
  // Functions have an additional continuation parameter. This should
  // not be visible when calling them from JavaScript
  return (f.l >= 0 ? f.l : (f.l = f.length)) - 1;
}

//Provides: caml_js_equals mutable (const, const)
function caml_js_equals(x, y) {
  // biome-ignore lint/suspicious/noDoubleEquals:
  return +(x == y);
}

//Provides: caml_js_strict_equals mutable (const, const)
function caml_js_strict_equals(x, y) {
  return +(x === y);
}

//Provides: caml_js_eval_string (const)
//Requires: caml_jsstring_of_string
function caml_js_eval_string(s) {
  // biome-ignore lint/security/noGlobalEval:
  return eval(caml_jsstring_of_string(s));
}

//Provides: caml_js_expr (const)
//Requires: caml_jsstring_of_string
function caml_js_expr(s) {
  console.error("caml_js_expr: fallback to runtime evaluation\n");
  // biome-ignore lint/security/noGlobalEval:
  return eval(caml_jsstring_of_string(s));
}

//Provides: caml_pure_js_expr const (const)
//Requires: caml_jsstring_of_string
function caml_pure_js_expr(s) {
  console.error("caml_pure_js_expr: fallback to runtime evaluation\n");
  // biome-ignore lint/security/noGlobalEval:
  return eval(caml_jsstring_of_string(s));
}

//Provides: caml_js_object (object_literal)
//Requires: caml_jsstring_of_string
function caml_js_object(a) {
  var o = {};
  for (var i = 1; i < a.length; i++) {
    var p = a[i];
    o[caml_jsstring_of_string(p[1])] = p[2];
  }
  return o;
}
/** @odoo-module **/
/* Copyright 2019 Tecnativa - Ernesto Tejeda
/* Copyright 2022 Tecnativa - Víctor Martínez
/* Copyright 2023 Tecnativa - Yadier Quesada
/* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).*/

import {SectionAndNoteListRenderer} from "@account/components/section_and_note_fields_backend/section_and_note_fields_backend";
import {patch} from "@web/core/utils/patch";
import {ProductLabelSectionAndNoteListRender} from "@account/components/product_label_section_and_note_field/product_label_section_and_note_field";

patch(ProductLabelSectionAndNoteListRender.prototype, {
    getActiveColumns(list) {
        const activeColumns = super.getActiveColumns(list);
        // Remove widgets from list_renderer columns
        return activeColumns.filter


 have §e10 §7non-god effects.
     */
    private val effectsCountPattern by RepoPattern.pattern(
        "misc.nongodpot.effects",
        "§7You have §e(?<name>\\d+) §7non-god effects\\.",
    )
    private var totalEffectsCount = 0

    @HandleEvent
    fun onProfileJoin(event: ProfileJoinEvent) {
        effectDuration.clear()
        display = emptyList()
    }

    @HandleEvent(onlyOnSkyblock = true)
    fun onChat(event: SkyHanniChatEvent) {
        if (event.message == "§aYou cleared all of your active effects!") {
            effectDuration.clear()
            update()
        }
    }

    @HandleEvent
    fun onEffectUpdate(event: EffectDurationChangeEvent) {
        val duration = event.duration ?: Duration.ZERO
        when (event.durationChangeType) {
            EffectDurationChangeType.ADD -> {
                if (setRecently.contains(event.effect)) return
                val existing = effectDuration[event.effect]?.duration ?: Duration.ZERO
                effectDuration[event.effect] = Timer(existing + duration)
            }

            EffectDurationChangeType.SET -> {
                effectDuration[event.effect] = Timer(duration)
                setRecently.add(event.effect)
            }

            EffectDurationChangeType.REMOVE -> {
                effectDuration.remove(event.effect)
            }
        }
        update()
    }

    private fun update() {
        if (effectDuration.values.removeIf { it.ended }) {
            // to fetch the real amount of active pots
            totalEffectsCount = 0
            checkFooter = true
        }

        display = drawDisplay()
    }

    private fun drawDisplay(): MutableList<String> {
        val newDisplay = mutableListOf<String>()
        for ((effect, time) in effectDuration.sorted()) {
            if (time.ended) continue
            if (effect == NonGodPotEffect.INVISIBILITY) continue

            if (effect.isMixin && !config.showMixins) continue

            val remaining = time.remaining.coerceAtLeast(0.seconds)
            val format = remaining.format(TimeUnit.HOUR)
            val color = remaining.timerColor()

            val displayName = effect.tabListName
            newDisplay.add("$displayName $color$format")
        }
        val diff = totalEffectsCount - effectDuration.size
        if (diff > 0) {
            newDisplay.add("§eOpen the /effects inventory")
            newDisplay.add("§eto show the missing $diff effects!")
            checkFooter = true
        }
        return newDisplay
    }

    @HandleEvent
    fun onSecondPassed(event: SecondPassedEvent) {
        if (!isEnabled()) return
        if (!ProfileStorageData.loaded) return

        if (config.displayEnabled) update()

        val effectWarning = config.expireWarning
        val effectSound = config.expireSound

        if (!effectWarning && !effectSound) return

        effectDuration.sorted().forEach { (effect, time) ->
            if (time.remaining.inWholeSeconds != config.expireWarnTime.toLong()) return

            if (effectWarning) TitleManager.sendTitle(effect.tabListName)
            if (effectSound) repeat(5) { playPlingSound() }
        }
    }

    @HandleEvent
    fun onWorldChange() {
        checkFooter = true
    }

    @HandleEvent(onlyOnSkyblock = true)
    fun onTabUpdate(event: TablistFooterUpdateEvent) {
        if (!checkFooter) return


lass JSDateUtility {

  static readonly MS_IN_DAY = 24 * 60 * 60 * 1000;

  static readonly TIME_IN_SECOND = 1000;
  static readonly TIME_IN_MINUTE = 60 * JSDateUtility.TIME_IN_SECOND;
  static readonly TIME_IN_HOUR = 60 * JSDateUtility.TIME_IN_MINUTE;
  static readonly TIME_IN_3_HOURS = 3 * JSDateUtility.TIME_IN_HOUR;
  static readonly TIME_IN_DAY = 24 * JSDateUtility.TIME_IN_HOUR;
  static readonly TIME_IN_3_DAYS = 3 * JSDateUtility.TIME_IN_DAY;
  static readonly TIME_IN_WEEK = 7 * JSDateUtility.TIME_IN_DAY;
  static readonly TIME_IN_90_DAYS = 90 * JSDateUtility.TIME_IN_DAY;

  // MARK: Date
  static isExpired(date: Date, expireTime): boolean {
    const timeNow = new Date().getTime();
    const dateTime = date.getTime();
    const expirationTime = dateTime + expireTime;
    return timeNow > expirationTime;
  }

  static compareDates(dateA: Date, dateB: Date): number {
    const a = dateA.getTime();
    const b = dateB.getTime();
    return (a > b) ? 1 : (a === b) ? 0 : -1;
  }

  static isToday(date: Date): boolean {
    const result = this.isSameDay(new Date(), date);
    return result;
  }

  static isSameDay(a: Date, b: Date): boolean {
    return a.getDate() === b.getDate() && a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear();
  }

  static isPriorAndWithinTheCurrentWeek(date: Date): boolean {
    const now = new Date();
    const days = this.fullDaysBetweenDates(now, date);
    return days < 7 && (date.getDay() <= now.getDay());
  }

  static isWithinTheLastWeek(date: Date): boolean {
    return this.fullDaysBetweenDates(new Date(), date) < 7;
  }

  static fullDaysBetweenDates(a: Date, b: Date): number {
    const result = Math.floor(this.daysBetweenDates(a, b));
    return result;
  }

  static daysBetweenDates(a: Date, b: Date): number {
    const timeDifference = Math.abs(a.getTime() - b.getTime());
    return timeDifference / JSDateUtility.MS_IN_DAY;
  }

  static timeDifferenceBetweenDates(a: Date, b: Date): number {
    return Math.abs(a.getTime() - b.getTime());
  }

  // DEPRECATED
  static getShortDateString(date: Date, separator = '/'): string {
    return (date.getMonth() + 1) + separator + (date.getDate()) + separator + date.getFullYear();
  }

  // DEPRECATED
  static get12HourTime(date: Date, addPadding?: boolean, addAmPm: boolean = true): string {
    const hour = date.getHours();

    return this.get12HourString(hour, addPadding) + ':' +
      this.getTwoDigitString(date.getMinutes()) + ':' +
      this.getTwoDigitString(date.getSeconds()) + ' ' +
      this.getAmPmString(hour);
  }

  static get12HourString(time: number, addPadding: boolean = false): string {
    time = ((time + 11) % 12 + 1);

    if (addPadding) {
      return this.getTwoDigitString(time);
    } else {
      return String(time);
    }
  }

  static getTwoDigitString(time: number | string): string {
    time = String(time);

    if (time.length === 1) {
      return '0' + time;
    } else {
      return time;
    }
  }

  static getAmPmString(dateHours: number) {
    if (dateHours < 12) {
      return 'AM';
    } else {
      return 'PM';
    }
  }

  //


h.beforeHiddenColumn::after,.handsontable th.afterHiddenColumn::before{content:'\25C0';color:#bbb;position:absolute;right:1px;top:2px;font-size:5pt}.handsontable th.afterHiddenColumn{position:relative}.handsontable th.afterHiddenColumn::before{left:1px;top:2px;right:auto;content:'\25B6'}.handsontable td.afterHiddenColumn.firstVisible{border-left:1px solid #CCC}.handsontable thead th.hiddenHeader{display:none}.handsontable .wtBorder{position:absolute;font-size:0}.handsontable .wtBorder.hidden{display:none!important}.handsontable td.area{background:-moz-linear-gradient(top,rgba(181,209,255,0.34) 0,rgba(181,209,255,0.34) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,rgba(181,209,255,0.34)),color-stop(100%,rgba(181,209,255,0.34)));background:-webkit-linear-gradient(top,rgba(181,209,255,0.34) 0,rgba(181,209,255,0.34) 100%);background:-o-linear-gradient(top,rgba(181,209,255,0.34) 0,rgba(181,209,255,0.34) 100%);background:-ms-linear-gradient(top,rgba(181,209,255,0.34) 0,rgba(181,209,255,0.34) 100%);background:linear-gradient(to bottom,rgba(181,209,255,0.34) 0,rgba(181,209,255,0.34) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#57b5d1ff',endColorstr='#57b5d1ff',GradientType=0);background-color:#fff}.handsontable .wtBorder.corner{font-size:0;cursor:crosshair}.handsontable .htBorder.htFillBorder{background:red;width:1px;height:1px}.handsontableInput{border:0;outline-width:0;margin:0;padding:1px 5px 0 5px;font-family:inherit;line-height:21px;font-size:inherit;box-shadow:0 0 0 2px #5292f7 inset;resize:none;display:inline-block;color:#000;border-radius:0;background-color:#FFF}.handsontableInputHolder{position:absolute;top:0;left:0;z-index:100}.htSelectEditor{-webkit-appearance:menulist-button!important;position:absolute;width:auto}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{content:'▶';color:#777;position:absolute;right:5px}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable .htAutocompleteArrow{float:right;font-size:10px;color:#EEE;cursor:default;width:16px;text-align:center}.handsontable td .htAutocompleteArrow:hover{color:#777}.handsontable td.area .htAutocompleteArrow{color:#d3d3d3}.handsontable .htCheckboxRendererInput{display:inline-block;vertical-align:middle}.handsontable .htCheckboxRendererInput.noValue{opacity:.5}.handsontable .htCheckboxRendererLabel{cursor:pointer;display:inline-block;width:100%}.htCommentCell{position:relative}.htCommentCell:after{content:'';position:absolute;top:0;right:0;border-left:6px solid transparent;border-top:6px solid red}@-webkit-keyframes opacity-hide{from{opacity:1}to{opacity:0}}@


ch_data[1] # ป้ายกำกับที่จับกลุ่ม
puts match_data[2] # ค่าที่จับกลุ่ม
# ผลลัพธ์:
# อายุ
# 30
```

### การใช้ไลบรารีของบุคคลที่สาม
แม้ว่าไลบรารีมาตรฐานของ Ruby จะมีพลังมาก คุณอาจต้องการความสามารถพิเศษบางอย่างบ้างเป็นบางครั้ง หนึ่งใน gem ยอดนิยมสำหรับการทำงานกับ regex คือ `Oniguruma` ซึ่งทำให้มีคุณสมบัติเพิ่มเติมในการทำงานกับ regex ที่เกินไปกว่าเครื่องยนต์ regex ภายในของ Ruby

ติดตั้งโดยใช้:

```bash
gem install oniguruma
```

ตัวอย่างการใช้งานอาจจะดูเหมือนนี้ (โดยสมมติว่าคุณได้เรียกร้อง `oniguruma` หลังจากติดตั้งเสร็จ):

```ruby
# นี่เป็นตัวอย่างขั้นสูงและอาจจำเป็นต้องตั้งค่าเพิ่มเติม
require 'oniguruma'

pattern = Oniguruma::ORegexp.new('(\d+)')
match_data = pattern.match("หมายเลขคือ 42.")
puts match_data[1]
# ผลลัพธ์: 42
```

จำไว้ว่า แม้ว่านิพจน์ปกติจะมีความสามารถมาก แต่ก็สามารถกลายเป็นความซับซ้อนและยากที่จะจัดการได้สำหรับรูปแบบที่ซับซ้อนมากขึ้น มุ่งเน้นไปที่ความสามารถในการอ่าน และพิจารณาวิธีการอื่น ๆ หาก regex ของคุณกลายเป็นเรื่องที่ซับซ้อนเกินไป
---
changelog:
- 2024-03-17, gpt-4-0125-preview, translated from English
date: 2024-03-17 21:50:49.309582-06:00
description: "\u0E27\u0E34\u0E18\u0E35\u0E01\u0E32\u0E23: Ruby \u0E21\u0E35\u0


30%</color>攻击的<color=#6666FF>能量伤害</color>',	'',	'',	'',	'6',	'913100401',	'',	''},
{'913100501',	'',	'暗羽之盾',	'战斗开始时，自身获得<color=#FFC432>6</color>层<color=#33CCFF>漆黑羽甲</color>，敌方目标行动结束时自身未受到伤害则增加1层<color=#33CCFF>漆黑羽甲</color>，自身受到终极技能的伤害时减少1层<color=#33CCFF>漆黑羽甲</color>；\n<color=#33CCFF>漆黑羽甲</color>：防御增加50，效果抵抗增加5%，上限10层，不可驱散',	'',	'',	'',	'5',	'913100501',	'',	''},
{'913100601',	'',	'迅捷之星',	'自身攻击后，对敌方攻击最高和耐久最低的目标分别使用1次【星落】',	'',	'',	'',	'5',	'913100601',	'',	''},
{'913100701',	'',	'观测追击',	'自身有50%概率进行反击，每使用1次【星落】自身机动增加1',	'',	'',	'',	'5',	'913100701',	'',	''},
{'913100801',	'',	'变形展开',	'自身攻击过后，对攻击最高和耐久最低的目标分别使用1次【星落】，达成某个条件时，会切换到逆焰形态',	'',	'',	'',	'5',	'913100801',	'',	''},
{'913100802',	'',	'变形展开',	'达成某个条件时，会切换到逆焰形态',	'',	'',	'',	'5',	'913100801',	'',	''},
{'913100803',	'',	'变形展开',	'达成某个条件时，会切换到逆焰形态',	'',	'',	'',	'5',	'913100801',	'',	''},
{'913100804',	'',	'变形展开',	'达成某个条件时，会切换到逆焰形态',	'',	'',	'',	'5',	'913100801',	'',	''},
{'913110101',	'',	'暗羽浮空刃',	'对敌方目标造成2次<color=#FFC432>50%</color>攻击的<color=#FF6719>物理伤害</color>',	'',	'',	'',	'6',	'913110101',	'',	''},
{'913110201',	'',	'聚能连射',	'对敌方竖排目标造成2次<color=#FFC432>40%</color>攻击的<color=#6666FF>能量伤害</color>，自身攻击后，若被攻击的目标耐久大于等于50%，则对


      }
    }else{
      for (auto& drb: recfg_r8.rr_cfg_ded.drb_to_add_mod_list){
        drb.pdcp_cfg_present = true;
        drb.pdcp_cfg.rlc_um_present = false;
        drb.pdcp_cfg.rlc_am_present = true;
        drb.pdcp_cfg.rlc_am.status_report_required = true;
        drb.rlc_cfg_present = true;

        // this is for pdcp 15bit sn
        if (*llfuzz_rrc_reconfig_type == PDCP_15BIT_SN){
          drb.pdcp_cfg.ext = true;
          drb.pdcp_cfg.pdcp_sn_size_v1130_present = true;  // 11
          printf("[LLFuzz] Set PDCP 15bit SN\n");
        }

        // pdcp 18 bit sn
        if (*llfuzz_rrc_reconfig_type == PDCP_18BIT_SN){
          drb.pdcp_cfg.ext = true;
          drb.pdcp_cfg.pdcp_sn_size_v1310_present = true; // 13
          printf("[LLFuzz] Set PDCP 18bit SN\n");
        }

        drb.rlc_cfg.set_am();
        drb.rlc_cfg.am().dl_am_rlc.t_reordering.value = t_reordering_opts::ms15; // ms15
        drb.rlc_cfg.am().dl_am_rlc.t_status_prohibit = t_status_prohibit_opts::ms0;

        drb.rlc_cfg.am().ul_am_rlc.t_poll_retx = t_poll_retx_opts::ms50; // ms50
        drb.rlc_cfg.am().ul_am_rlc.poll_pdu = poll_pdu_opts::p8; // p8
        drb.rlc_cfg.am().ul_am_rlc.poll_byte = poll_byte_opts::kb1000; // kb1000
        drb.rlc_cfg.am().ul_am_rlc.max_retx_thres = ul_am_rlc_s::max_retx_thres_opts::t8;
        if (*llfuzz_rrc_reconfig_type == RLC_16BIT_SN || *llfuzz_rrc_reconfig_type == RLC_15BIT_LI || *llfuzz_rrc_reconfig_type == RLC_16BIT_SN_15BIT_LI){ // *llfuzz_rrc_reconfig_type != PDCP_15BIT_SN && *llfuzz_rrc_reconfig_type != PDCP_18BIT_SN
          drb.ext = true;
        }

        if (*llfuzz_rrc_reconfig_type == RLC_10BIT_SN_11BIT_LI){
          printf("[LLFuzz] Set RLC 10bit SN 11bit LI\n");
        }

        // code for enable extended SN RLC AM (16BIT SN)
        if (*llfuzz_rrc_reconfig_type == RLC_16BIT_SN || *llfuzz_rrc_reconfig_type == RLC_16BIT_SN_15BIT_LI){
          asn1::rrc::rlc_cfg_v1310_s rlc_cfg_v13 = {};
          rlc_cfg_v13.dl_extended_rlc_am_sn_r13 = true;
          // rlc_cfg_v13.ul_extended_rlc_am_sn_r13 = true;
          drb.rlc_cfg_v1310 = asn1::copy_ptr<asn1::rrc::rlc_cfg_v1310_s>(new asn1::rrc::rlc_cfg_v1310_s(rlc_cfg_v13));
          printf("[LLFuzz] Set RLC 16bit SN\n");
        }

        // code for enable extended LI in RLC AM (15BIT LI)
        if (*llfuzz_rrc_reconfig_type == RLC_15BIT_LI || *llfuzz_rrc_reconfig_type == RLC_16BIT_SN_15BIT_LI){
          asn1::rrc::rlc_cfg_v1250_s rlc_cfg_v12 = {};
          rlc_cfg_v12.dl_extended_rlc_li_field_r12 = true;
          // rlc_cfg_v12.ul_extended_


0)" opacity="1"></rect><rect x="60" width="11" height="10" y="56" fill="rgb(209, 159, 0)" opacity="1"></rect><rect x="72" width="11" height="9" y="57" fill="rgb(209, 159, 0)" opacity="1"></rect><rect x="84" width="11" height="9" y="57" fill="rgb(209, 159, 0)" opacity="1"></rect></g><g transform="translate(360,158.5)"><text font-size="25" x="85" font-weight="100" y="0" dy=".33em" text-anchor="middle" style="font-size: 25px;">𝑓</text><g transform="translate(220,15)"><rect x="0" width="11" height="11" y="-11" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="12" width="11" height="2" y="-2" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="24" width="11" height="5" y="-5" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="36" width="11" height="1" y="-1" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="48" width="11" height="8" y="-8" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="60" width="11" height="2" y="-2" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="72" width="11" height="11" y="-11" fill="rgb(169, 125, 0)" opacity="1"></rect><rect x="84" width="11" height="8" y="-8" fill="rgb(169, 125, 0)" opacity="1"></rect></g></g><g transform="translate(635,40)"><text x="-40" y="-110" font-weight="600" style="font-size: 16px;">Layer N + 1</text><g><path class="link" d="M-74.5891421526205,7.83963474507403L-15.593376811331934,73.36107005503543" stroke-width="0" stroke="#ccc"></path><path class="link" d="M-30.50524823068501,-68.51590932319507L-15.593376811331934,73.36107005503543" stroke-width="1" stroke="#ccc"></path><path class="link" d="M-30.50524823068501,-68.51590932319507L-74.5891421526205,7.83963474507403" stroke-width="1" stroke="#ccc"></path><path class="link" d="M55.735861910804566,-50.18479547691436L-15.593376811331934,73.36107005503543" stroke-width="1" stroke="#ccc"></path><path class="link" d="M55.735861910804566,-50.18479547691436L-74.5891421526205,7.83963474507403" stroke-width="1" stroke="#ccc"></path><path class="link" d="M55.735861910804566,-50.18479547691436L-30.50524823068501,-68.51590932319507" stroke-width="1" stroke="#ccc"></path><path class="link" d="M-15.593376811331934,73.36107005503543L64.9519052838329,37.49999999999999" stroke-width="0" stroke="#ccc"></path><path class="link" d="M-74.5891421526205,7.83963474507403L64.9519052838329,37.49999999999999" stroke-width="0" stroke="#ccc"></path><path class="link" d="M-30.50524823068501,-68.51590932319507L64.9519052838329,37.49999999999999" stroke-width="1" stroke="#ccc"></path><path class="link" d="M55.735861910804566,-50.18479547691436L64.9519052838329,37.49999999999999" stroke-width="1" stroke="#ccc"></path></g><circle class="node" transf


 {bar}` [E0369]
    //~| ERROR 16:11: 16:13: mismatched types [E0308]

    foo > foo;
    //~^ ERROR 20:9: 20:10: binary operation `>` cannot be applied to type `fn() -> i32 {foo}` [E0369]

    foo > bar;
    //~^ ERROR 23:9: 23:10: binary operation `>` cannot be applied to type `fn() -> i32 {foo}` [E0369]
    //~| ERROR 23:11: 23:14: mismatched types [E0308]
}
use crate::ray::Ray;
use crate::vec3::Vec3;
use crate::{hittable::HitRecord, random_unit_vec3, random_f64};

#[derive(Debug, Copy, Clone)]
#[allow(dead_code)]
pub enum Material {
    Lambertian(Vec3),
    Metal(Vec3, f64),
    Dielectric(f64),
    Mirror,
}

pub fn scatter(ray: Ray, rec: HitRecord, color: &mut Vec3, material: Material) -> Option<Ray> {
    match material {
        Material::Lambertian(col) => lambertian_scatter(ray, rec, color, col),
        Material::Metal(col, fuzz) => metal_scatter(ray, rec, color, col, fuzz),
        Material::Dielectric(refractive_index) => dielectric_scatter(ray, rec, color, refractive_index),
        Material::Mirror => mirror_scatter(ray, rec, color),
    }
}

fn reflect(v: Vec3, n: Vec3) -> Vec3 {
    v - n * (2.0 * v.dot(n))
}

fn refract(uv: Vec3, n: Vec3, etai_over_etat: f64) -> Option<Vec3> {
    let uv_ = uv.unit_vector();
    let dt = uv_.dot(n);
    let discriminant = 1.0 - etai_over_etat * etai_over_etat * (1.0 - dt * dt);
    if discriminant > 0.0 {
        Some(((uv_ - n * dt) * etai_over_etat) - (n * discriminant.sqrt()))
    } else {
        None
    }
}

fn schlick(cosine: f64, ref_idx: f64) -> f64 {
    let r0 = {
        let a = (1.0 - ref_idx) / (1.0 + ref_idx);
        a * a
    };
    r0 + (1.0 - r0) * (1.0 - cosine).powf(5.0)
}

fn lambertian_scatter(
    _ray: Ray,
    rec: HitRecord,
    color: &mut Vec3,
    material_color: Vec3,
) -> Option<Ray> {
    let scatter_direction = rec.normal.unwrap() + random_unit_vec3();
    color.clone_from(&material_color);
    Some(Ray::new(rec.p.unwrap(), scatter_direction))
}

fn metal_scatter(
    ray: Ray,
    rec: HitRecord,
    color: &mut Vec3,
    material_color: Vec3,
    fuzz: f64,
) -> Option<Ray> {
    let reflected = reflect(ray.direction().unit_vector(), rec.normal.unwrap());
    let scattered = Ray::new(rec.p.unwrap(), reflected + random_unit_vec3() * fuzz);
    color.clone_from(&material_color);
    if scattered.direction().dot(rec.normal.unwrap()) > 0.0 {
        Some(scattered)
    } else {
        None
    }
}

fn mirror_scatter(
    ray: Ray,
    rec: HitRecord,
    color: &mut Vec3,
) -> Option<Ray> {
    let reflected = Ray::new(rec.p.unwrap(), reflect(ray.direction().unit_vector(), rec.normal.unwrap()));
    color.clone_from(&Vec3::new(1.0, 1.0, 1.0));
    if reflected.direction().dot(rec.normal.unwrap()) > 0.0 {
        Some(reflected)
    } else {
        None
    }
}

fn dielectric_scatter(
    ray: Ray,
    rec: HitRecord,
    color: &mut Vec3,
    refractive_index: f64,


4);

        let addr = u32::max_value() - 1;
        mem.write_word(SUPERVISOR_DATA, addr, 0x9192);
        assert_eq!(0x9192, mem.read_word(SUPERVISOR_DATA, addr));
    }

    #[test]
    fn cross_type_boundary_long_access() {
        let mut mem = PagedMem::new(0x01020304);

        let addr = u32::max_value() - 1;
        mem.write_long(SUPERVISOR_DATA, addr, 0x91929394);
        assert_eq!(0x91929394, mem.read_long(SUPERVISOR_DATA, addr));
    }
}
<filename>test/com/facebook/buck/features/rust/testdata/cxx_with_rust_dep/morehello.rs
extern {
    fn evenmorehello();
}

pub fn helloer() {
    println!("I'm saying \"hello\" again!");
    unsafe { evenmorehello() };
}
// Copyright 2017 The Exonum Team
//
// 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.

use std::borrow::Cow;

use serde_json;
use serde::{Deserialize, Deserializer};

use exonum::storage::StorageValue;
use exonum::crypto::{hash, CryptoHash, Hash};
use exonum::helpers::Height;

use details::btc;
use details::btc::transactions::FundingTx;

/// Public part of anchoring service configuration stored in blockchain.
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
pub struct AnchoringConfig {
    /// Validators' public keys from which the current anchoring address can be calculated.
    pub anchoring_keys: Vec<btc::PublicKey>,
    /// The transaction that funds anchoring address.
    /// If the anchoring transactions chain is empty, it will be the first transaction in the chain.
    /// Note: you must specify a suitable transaction before the network launching.
    pub funding_tx: Option<FundingTx>,
    /// Fee for each transaction in chain.
    pub fee: u64,
    /// The frequency in blocks with which the generation of new anchoring
    /// transactions in the chain occurs.
    pub frequency: u64,
    /// The minimum number of confirmations in bitcoin network for the transition to a
    /// new anchoring address.
    pub utxo_confirmations: u64,
    /// The current bitcoin network type.
    #[serde(serialize_with = "btc_network_to_str", deserialize_with = "btc_network_from_str")]
    pub network: btc::Network,
}

impl Default for AnchoringConfig {
    fn default() -> AnchoringConfig {
        AnchoringConfig {
            anchoring_keys: vec![],
            funding_tx: None,
            fee: 1000,
            frequency: 500,
            utxo_confirmations: 5,
            network: btc::Network::Testnet,
        }
    }
}

impl AnchoringConfig {
    /// Creates anchoring configuration for the given `anchoring_keys` without funding


: Int,
	@DrawableRes private val iconResId: Int,
	private val listener: Listener?,
) : RecyclerView.Adapter<HeaderViewHolder>() {

	private var showMoreButton = false
	private var isVisible = true

	fun setIsVisible(isVisible: Boolean) {
		if (this.isVisible == isVisible) {
			return
		}

		this.isVisible = isVisible

		if (isVisible) {
			notifyItemInserted(0)
		} else {
			notifyItemRemoved(0)
		}
	}

	fun setShowMoreButton(showMoreButton: Boolean) {
		if (this.showMoreButton == showMoreButton) {
			return
		}

		this.showMoreButton = showMoreButton
		notifyItemChanged(1)
	}

	override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HeaderViewHolder {
		val layoutInflater = LayoutInflater.from(parent.context)
		val binding = PersonalFragmentHeaderItemBinding.inflate(layoutInflater, parent, false)

		if (listener == null) {
			binding.more.isVisible = false
		} else {
			binding.more.setOnClickListener {
				listener.onMoreClicked()
			}
		}

		return HeaderViewHolder(binding)
	}

	override fun onBindViewHolder(holder: HeaderViewHolder, position: Int) {

		holder.itemView.apply {
			val marginTop = resources.getDimensionPixelSize(R.dimen.activity_vertical_margin)
			updateLayoutParams<RecyclerView.LayoutParams> {
				topMargin = if (position == 0) 0 else marginTop
			}
		}

		holder.bind(labelResId, iconResId, showMoreButton)
	}

	override fun getItemCount() = if (isVisible) 1 else 0

	fun interface Listener {
		fun onMoreClicked()
	}
}
package de.christinecoenen.code.zapp.app.mediathek.ui.dialogs

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.fragment.app.setFragmentResult
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import de.christinecoenen.code.zapp.R
import de.christinecoenen.code.zapp.models.shows.MediathekShow
import de.christinecoenen.code.zapp.models.shows.Quality

class SelectQualityDialog : AppCompatDialogFragment() {

	companion object {

		const val REQUEST_KEY_SELECT_QUALITY = "REQUEST_KEY_SELECT_QUALITY"
		private const val REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY =
			"REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY"
		private const val ARGUMENT_MEDIATHEK_SHOW = "ARGUMENT_MEDIATHEK_SHOW"
		private const val ARGUMENT_MODE = "ARGUMENT_MODE"

		@JvmStatic
		fun newInstance(mediathekShow: MediathekShow, mode: Mode): SelectQualityDialog {
			return SelectQualityDialog().apply {
				arguments = Bundle().apply {
					putSerializable(ARGUMENT_MEDIATHEK_SHOW, mediathekShow)
					putSerializable(ARGUMENT_MODE, mode)
				}
			}
		}

		@JvmStatic
		fun getSelectedQuality(bundle: Bundle): Quality {
			return bundle.getSerializable(REQUEST_KEY_SELECT_QUALITY_KEY_QUALITY) as Quality
		}
	}

	private lateinit var mode: Mode
	private lateinit var qualities: List<Quality>
	private lateinit var qualityLabels: List<String>

	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)

		mode = requireArguments().getSerializable(ARGUMENT_MODE) as Mode

		val show = requireArguments().getSerializable(ARGUMENT_MEDIATHEK_SHOW) as MediathekShow

		qualities = when (


cd65c";
		crc.fill(pflanze1);
		crc.strokeStyle = "green";
		crc.stroke(pflanze1);

		let pflanze2: Path2D = new Path2D();
		pflanze2.moveTo(700, 630);
		pflanze2.lineTo(720, 630);
		pflanze2.lineTo(800, 200);
		pflanze2.closePath();
		crc.fillStyle = "#5cd65c";
		crc.fill(pflanze2);
		crc.strokeStyle = "green";
		crc.stroke(pflanze2);

		let pflanze3: Path2D = new Path2D();
		pflanze3.moveTo(800, 630);
		pflanze3.lineTo(820, 630);
		pflanze3.lineTo(600, 100);
		pflanze3.closePath();
		crc.fillStyle = "#5cd65c";
		crc.fill(pflanze3);
		crc.strokeStyle = "green";
		crc.stroke(pflanze3);

		let pflanze4: Path2D = new Path2D();
		pflanze4.moveTo(600, 630);
		pflanze4.lineTo(620, 630);
		pflanze4.lineTo(700, 100);
		pflanze4.closePath();
		crc.fillStyle = "#00cc99";
		crc.fill(pflanze4);
		crc.strokeStyle = "green";
		crc.stroke(pflanze4);

		let pflanze5: Path2D = new Path2D();
		pflanze5.moveTo(300, 630);
		pflanze5.lineTo(320, 630);
		pflanze5.lineTo(200, 100);
		pflanze5.closePath();
		crc.fillStyle = "#00cc99";
		crc.fill(pflanze5);
		crc.strokeStyle = "green";
		crc.stroke(pflanze5);

		let pflanze6: Path2D = new Path2D();
		pflanze6.moveTo(400, 630);
		pflanze6.lineTo(420, 630);
		pflanze6.lineTo(400, 100);
		pflanze6.closePath();
		crc.fillStyle = "#00cc99";
		crc.fill(pflanze6);
		crc.strokeStyle = "green";
		crc.stroke(pflanze6);

	}

	function moveSpielerFisch(e: KeyboardEvent): void { // FUNKTION um Spielerfisch zu bewegen

		if (e.keyCode == 37) { // Linke Pfeiltaste

			spielerfisch.x -= 15;
			spielerfisch.schwimmrichtung = "links";
		}

		else if (e.keyCode == 38) { // Obere Pfeiltaste

			spielerfisch.y -= 15;
		}

		else if (e.keyCode == 39) { // Rechte Pfeiltaste

			spielerfisch.x += 15;
			spielerfisch.schwimmrichtung = "rechts";
		}

		else if (e.keyCode == 40) { // Untere Pfeiltaste

			spielerfisch.y += 15;
		}
	}

}import { Injectable } from '@angular/core';
import { Rest } from './Rest';
import { HttpClient } from '@angular/common/http';
import { CreateDMTitle, SendDMMessage } from 'src/app/models/models';
import { LoadingService } from '../visualServices/loading.service';

@Injectable({
  providedIn: 'root'
})
/**
 * Service to manage the direct messages request
 *
 * @class
 * @extends Rest
 */
export class DirectMessagesService extends Rest{

  //
  // ──────────────────────────────────────────────────────────────────────
  //   :::::: C L A S S   V A R S : :  :   :    :     :        :          :
  // ──────────────────────────────────────────────────────────────────────
  //

  /**
   * The path to the home http requests
   *
   * @access private
   * @var {string} __dmPath
   */
  private __dmPath:string = "DirectMessages/";

  //
  // ──────────────────────────────────────────────────────────────────


;var c=u.defaults.scroller;if(a||c)c=e.extend({},a,c),!1!==a&&new k(b,c)}});e.fn.dataTable.Scroller=k;e.fn.DataTable.Scroller=k;var p=
e.fn.dataTable.Api;p.register("scroller()",function(){return this});p.register("scroller().rowToPixels()",function(a,b,c){var d=this.context;if(d.length&&d[0].oScroller)return d[0].oScroller.rowToPixels(a,b,c)});p.register("scroller().pixelsToRow()",function(a,b,c){var d=this.context;if(d.length&&d[0].oScroller)return d[0].oScroller.pixelsToRow(a,b,c)});p.register(["scroller().scrollToRow()","scroller.toPosition()"],function(a,b){this.iterator("table",function(c){c.oScroller&&c.oScroller.scrollToRow(a,
b)});return this});p.register("row().scrollTo()",function(a){var b=this;this.iterator("row",function(c,d){c.oScroller&&(d=b.rows({order:"applied",search:"applied"}).indexes().indexOf(d),c.oScroller.scrollToRow(d,a))});return this});p.register("scroller.measure()",function(a){this.iterator("table",function(b){b.oScroller&&b.oScroller.measure(a)});return this});p.register("scroller.page()",function(){var a=this.context;if(a.length&&a[0].oScroller)return a[0].oScroller.pageInfo()});return k});
/*! Bootstrap 5 ui integration for DataTables' SearchBuilder
 * ©2016 SpryMedia Ltd - datatables.net/license
 */
(function (factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define(['jquery', 'datatables.net-bs5', 'datatables.net-searchbuilder'], function ($) {
            return factory($, window, document);
        });
    }
    else if (typeof exports === 'object') {
        // CommonJS
        module.exports = function (root, $) {
            if (!root) {
                root = window;
            }
            if (!$ || !$.fn.dataTable) {
                // eslint-disable-next-line @typescript-eslint/no-var-requires
                $ = require('datatables.net-bs5')(root, $).$;
            }
            if (!$.fn.dataTable.searchBuilder) {
                // eslint-disable-next-line @typescript-eslint/no-var-requires
                require('datatables.net-searchbuilder')(root, $);
            }
            return factory($, root, root.document);
        };
    }
    else {
        // Browser
        factory(jQuery, window, document);
    }
}(function ($, window, document) {
    'use strict';
    var dataTable = $.fn.dataTable;
    $.extend(true, dataTable.SearchBuilder.classes, {
        clearAll: 'btn btn-light dtsb-clearAll'
    });
    $.extend(true, dataTable.Group.classes, {
        add: 'btn btn-light dtsb-add',
        clearGroup: 'btn btn-light dtsb-clearGroup',
        logic: 'btn btn-light dtsb-logic'
    });
    $.extend(true, dataTable.Criteria.classes, {
        condition: 'form-select dtsb-condition',
        data: 'dtsb-data form-select',
        "delete": 'btn btn-light dtsb-delete',
        input: 'form-control dtsb-input',
        left: 'btn btn-light dtsb-left',
        right: 'btn btn-light dtsb-right',
        select: 'form-select',
        value: 'dtsb-value'
    });
    return dataTable.searchPanes;
}));
/*! SearchBuilder 1.1.0
 * ©SpryMedia Ltd - datatables.net/license/mit
 */
(function () {
    'use strict';

    var $$2;
    var dataTable$2;
    var moment = window.moment;
    var luxon = window.luxon;
    /**
     * Sets the value of jQuery for use in the file
     *
     * @param jq the instance of jQuery to be set
     */
    function setJQuery$2(jq) {
        $$2 = jq;
        dataTabl


      :maxwidth((IconW - 4) / self:GetZoom())
                :maxheight((IconH - 4) / self:GetZoom())
                :visible(false)
            end
        }
    }
end

return t


q!(pallet_answer_sha256, final_answer_final_sha256);
	});
}

#[test]
fn test_bug_online_answer_faild_2235 () {
	let final_answer_raw =  toVec("C");
	let final_answer_sha256 =  toVec("6b23c0d5f35d1b11f9b683f0b0a617355deb11277d91ae091d399c655b87940d");
	let final_puzzle_txid = toVec("liIoGRFRiXTFOAga2G-TXVu6stHjq4ZDPEcET6v21iw");
	let final_answer_puzzle_hash =  toVec("6b23c0d5f35d1b11f9b683f0b0a617355deb11277d91ae091d399c655b87940dliIoGRFRiXTFOAga2G-TXVu6stHjq4ZDPEcET6v21iw");
	let final_answer_final_sha256 =  toVec("aaa3ef39d81f3a78f75f8c1a5bc454401746697f86930a809717b3503debd9cd");
	new_test_ext().execute_with(|| {
		System::set_block_number(5);

		// Create puzzle hash on the chain.
		handle_create_puzzle(
			toAid(CONST_ORIGIN_IS_CREATOR),
			final_puzzle_txid.clone(),
			final_answer_final_sha256.clone(),
		);

		// Check puzzle no answers.
		let answer_list =
			<PuzzleDirectAnswer<Test>>::iter_prefix(final_puzzle_txid.clone()).collect::<Vec<_>>(); // ::puzzle_direct_answer(&toVec("PUZZLE_HASH"));
		assert_eq!(0, answer_list.len());

		let mut puzzle_content = <PuzzleInfo<Test>>::get(&final_puzzle_txid).unwrap();
		assert_eq!(puzzle_content.puzzle_status, PuzzleStatus::PUZZLE_STATUS_IS_SOLVING);

		// Check puzzle no win answers.
		System::set_block_number(15);

		assert_ok!(AtochaModule::answer_puzzle(
			Origin::signed(toAid(CONST_ORIGIN_IS_ANSWER_1)),
			final_puzzle_txid.clone(),
			toVec("C"),
			vec![]
		));

		let answer_list =
			<PuzzleDirectAnswer<Test>>::iter_prefix(final_puzzle_txid.clone()).collect::<Vec<_>>(); // ::puzzle_direct_answer(&toVec("PUZZLE_HASH"));
		assert_eq!(1, answer_list.len());

		let mut puzzle_content = <PuzzleInfo<Test>>::get(&final_puzzle_txid).unwrap();
		assert_eq!(puzzle_content.puzzle_status, PuzzleStatus::PUZZLE_STATUS_IS_SOLVED);

	});
}

// fn test_issue_challenge_and_take_answer_reward() {
// 	new_test_ext().execute_with(|| {
// 		System::set_block_number(5);
//
// 		let puzzle_hash = toVec("PUZZLE_TX_ID");
// 		let answer_plain_txt = toVec("ANSWER_HASH_256");
// 		let answer_plain_txt_err = toVec("ANSWER_HASH_ERROR_256");
// 		let answer_hash = make_answer_sha256(answer_plain_txt.clone(), puzzle_hash.clone());
//
// 		// Create puzzle hash on the chain.
// 		handle_create_puzzle(
// 			toAid(CONST_ORIGIN_IS_CREATOR),
// 			puzzle_hash.clone(),
// 			answer_hash.clone(),
// 		);
//
//
// 		// Check puzzle no answers.
// 		let answer_list =
//


import * as testBoggle from '../functional/BoggleBoardData'
const BOARD_HEIGHT = 8;
const BOARD_WIDTH = 8;

describe("test addword function", () =>
    it("should show farm as being added to the board", () => {
        let testBoard:string[][] = Array(BOARD_HEIGHT).fill("0").map(x => Array(BOARD_WIDTH).fill("0"))
        let currentPoint = {xIndex: 6, yIndex: 6}
        let added = testBoggle.addWord(testBoard, currentPoint, "farm")
        expect(added).toBe(true)
    }),

)
describe("test addword function", () =>
    it("should not reuse indices on the same word", () => {
        let testBoard:string[][] = Array(BOARD_HEIGHT).fill("0").map(x => Array(BOARD_WIDTH).fill("0"))

        let currentPoint = {xIndex: 2, yIndex: 2}
        let added = testBoggle.addWord(testBoard, currentPoint, "tttttttttttttttttttt")
        expect(added).toBe(true)
    }),

)

describe("test dictionaryToCharCounts addword function", () =>
    it("should show a=4 ...", () => {
        let testDictionary:string[] = ['alpha', 'bat', 'camel', 'mango', 'wolf']
        let out = dictionaryToCharCounts(testDictionary);
        expect(out.get('a')).toBe(5);
        expect(out.get('l')).toBe(3);
        expect(out.get('p')).toBe(1);
        expect(out.get('m')).toBe(2);

    }),

)

describe("test addDictionary", () =>
    it("should return true and match the charcounts of the dictionary ...", () => {
        let testDictionary:string[] = ['alpha', 'bat', 'camel', 'mango', 'wolf', 'golf', 'foxtrot']
        let testBoard:string[][] = Array(BOARD_HEIGHT).fill("0").map(x => Array(BOARD_WIDTH).fill("0"))
        expect(testBoggle.addDictionary(testBoard, testDictionary)).toBe(true);
        expect(matchCharCounts(dictionaryToCharCounts(testDictionary), boardToCharCounts(testBoard))).toBe(true)

    }),

)

describe("test Generate Board", () =>
    it("should return true and match the charcounts of the dictionary ...", () => {
        let boardData = testBoggle.generateBoard();
        expect(matchCharCounts(dictionaryToCharCounts(boardData.dictionary), boardToCharCounts(boardData.board))).toBe(true)
    }),

)

describe("test Generate finished Board", () =>
    it("should return a board with no 0", () => {
        let boardData = testBoggle.generateFinishedBoard();
        expect(matchCharCounts(dictionaryToCharCounts(boardData.dictionary), boardToCharCounts(boardData.board))).toBe(true)
    }),

)

const printBoard = (board:string[][]): void =>
{
    let print = "";
    for(let i=0; i<BOARD_HEIGHT; i++)
    {
        for(let j=0; j<BOARD_WIDTH; j++)
        {
            print+=" " + board[i][j];
        }
        print += "\n";
    }
    console.log(print)
}

const dictionaryToCharCounts = (dictionary: string[]): Map<string, number> =>
{
    let charMap = new Map<string, number>();
    for(let i=0; i<dictionary.length; i++)
    {
        let currentWord = dictionary[i];
        for(let j=0; j<currentWord.length; j++)
        {
            let currentLetter = currentWord[j];
            let currentCount = charMap.get(currentLetter);
            if(currentCount!==undefined)
            {
                charMap.set(currentLetter, currentCount+1)
            }
            else
            {
                charMap.set(currentLetter, 1)
            }


s->is_last);
  return GRPC_ERROR_NONE;
}

/* Destructor for channel data */
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
                                 grpc_channel_element *elem) {}

const grpc_channel_filter grpc_message_compress_filter = {
    compress_start_transport_stream_op_batch,
    grpc_channel_next_op,
    sizeof(call_data),
    init_call_elem,
    grpc_call_stack_ignore_set_pollset_or_pollset_set,
    destroy_call_elem,
    sizeof(channel_data),
    init_channel_elem,
    destroy_channel_elem,
    grpc_channel_next_get_info,
    "message_compress"};


-selector,.25rem)*6);padding:.25rem}.xl\:checkbox-lg{--size:calc(var(--size-selector,.25rem)*7);padding:.3125rem}.xl\:checkbox-xl{--size:calc(var(--size-selector,.25rem)*8);padding:.375rem}}@media (width>=1536px){.\32 xl\:checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000));cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1))inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;position:relative;&:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0px 3px 0 0px oklch(100% 0 0/calc(var(--depth)*.1))inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}&:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}&:checked,&[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1))inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1));&:before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media (forced-colors:active){&:before{--tw-content:"✔";clip-path:none;background-color:#0000;rotate:none}}@media print{&:before{--tw-content:"✔";clip-path:none;background-color:#0000;rotate:none}}}&:indeterminate{&:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}}}.\32 xl\:checkbox-primary{color:var(--color-primary-content);--input-color:var(--color-primary)}.\32 xl\:checkbox-secondary{color:var(--color-secondary-content);--input-color:var(--color-secondary)}.\32 xl\:checkbox-accent{color:var(--color-accent-content);--input-color:var(--color-accent)}.\32 xl\:checkbox-neutral{color:var(--color-neutral-content);--input-color:var(--color-neutral)}.\32 xl\:checkbox-info{color:var(--color-info-content);--input-color:var(--color-info)}.\32 xl\:checkbox-success{color:var(--color-success-content);--input-color:var(--color-success)}.\32 xl\:checkbox-warning{color:var(--color-warning-content);--input-color:var(--color-warning)}.\32 xl\:checkbox-error{color:var(--color-error-content);--input-color:var(--color-error)}


# Загрузка модуля pygame.
import pygame

# Загрузка внутренних модулей Pygame
pygame.init()

# Разрешение окна СЦЕНЫ.
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Создание окна СЦЕНЫ:
SCENE = pygame.display.set_mode(
    [SCREEN_WIDTH, SCREEN_HEIGHT],     # Разрешение окна программы.
    flags=pygame.SCALED,               # Интрукция для вертикальной синхронизации.
    vsync=True                         # Вертикальная синхронизация.
)
# Заголовок окна СЦЕНА:
pygame.display.set_caption('Маруся')

# Блок для загрузки объектов:

player = pygame.Rect(0, 0, 50, 50)

enemy = pygame.Rect(400 - 100, 300 - 100, 200, 200)

# Настройка мыши:

pygame.mouse.set_visible(False)

# Настройки FPS:
FPS = 60
clock = pygame.time.Clock()

# СЦЕНА:
running = True
while running:
    clock.tick(FPS)

    # Заливка фона сцены RGB
    SCENE.fill([73, 14, 117])

    player.center = pygame.mouse.get_pos()

    pygame.draw.rect(SCENE, [20, 185, 222], player)

    if player.colliderect(enemy):
        pygame.draw.rect(SCENE, [255, 0, 0], enemy)
    else:
        pygame.draw.rect(SCENE, [0, 255, 0], enemy)

    # Обработка событий в окне сцены:
    for event in pygame.event.get():

        # Нажатие на крестик окна завершит цикл СЦЕНЫ:
        if event.type == pygame.QUIT:
            running = False

    pygame.display.update()

# Выход из программы.
pygame.quit()


 VSTAR",
		fr: "Deoxys VSTAR",
		es: "Deoxys V-ASTRO",
		it: "Deoxys V ASTRO",
		pt: "Deoxys V-ASTRO",
		de: "Deoxys VSTAR"
	},

	rarity: "Ultra Rare",
	category: "Pokemon",
	hp: 270,
	types: ["Psychic"],

	evolveFrom: {
		en: "Deoxys V",
		fr: "Deoxys-V",
		es: "Deoxys V",
		it: "Deoxys-V",
		pt: "Deoxys V",
		de: "Deoxys-V"
	},

	stage: "VSTAR",
	suffix: "V",

	attacks: [{
		cost: ["Psychic", "Psychic", "Colorless"],

		name: {
			en: "Psychic Javelin",
			fr: "Javelot Psy",
			es: "Jabalina Psíquica",
			it: "Giavellotto Psichico",
			pt: "Lança Psíquica",
			de: "Psycho-Speer"
		},

		effect: {
			en: "This attack also does 60 damage to 1 of your opponent's Benched Pokémon V. (Don't apply Weakness and Resistance for Benched Pokémon.)",
			fr: "Cette attaque inflige aussi 60 dégâts à l'un des Pokémon-V de Banc de votre adversaire. (N'appliquez ni la Faiblesse ni la Résistance aux Pokémon de Banc.)",
			es: "Este ataque también hace 60 puntos de daño a 1 de los Pokémon V en Banca de tu rival. (No apliques Debilidad y Resistencia a los Pokémon en Banca).",
			it: "Questo attacco infligge anche 60 danni a uno dei Pokémon-V nella panchina del tuo avversario. Non applicare debolezza e resistenza ai Pokémon in panchina.",
			pt: "Este ataque também causa 60 pontos de dano a 1 dos Pokémon V no Banco do seu oponente (não aplique Fraqueza e Resistência aos Pokémon no Banco).",
			de: "Diese Attacke fügt auch 1 Pokémon-V auf der Bank deines Gegners 60 Schadenspunkte zu. (Wende Schwäche und Resistenz bei Pokémon auf der Bank nicht an.)"
		},

		damage: 190
	}, {
		cost: ["Psychic"],

		name: {
			en: "Star Force",
			fr: "Force Star",
			es: "Fuerza Astro",
			it: "Astro Forza",
			pt: "Força Astral",
			de: "Sternenkraft"
		},

		effect: {
			en: "This attack does 60 damage for each Energy attached to both Active Pokémon. (You can't use more than 1 VSTAR Power in a game.)",
			fr: "Cette attaque inflige 60 dégâts pour chaque Énergie attachée aux deux Pokémon Actifs. (Vous ne pouvez utiliser qu'une seule Puissance VSTAR par partie.)",
			es: "Este ataque hace 60 puntos de daño por cada Energía unida a ambos Pokémon Activos. (No puedes usar más de 1 Poder V-ASTRO en una partida).",
			it: "Questo attacco infligge 60 danni per ogni Energia assegnata a entrambi i Pokémon attivi. Non puoi usare più di un Potere V ASTRO a partita.",
			pt: "Este ataque causa 60 pontos de dano para cada Energia ligada a ambos os Pokémon Ativos (você não pode usar mais de 1 Poder V-ASTRO por partida).",
			de: "Diese Attacke fügt für jede an beide Aktive Pokémon angelegte Energie 60 Schadenspunkte zu. (Du kannst pro Spiel nur 1 VSTAR-Power einsetzen.)"
		},

		damage: "60×"
	}],

	retreat: 2,
	regulationMark: "F",
	variants: {
		normal: false,
		reverse: false,
		holo: true,
		firstEdition: false


fldl 24(%esp)
fstpl 24(%eax)
fldl 32(%esp)
fstpl 32(%eax)
fldl 40(%esp)
fstpl 40(%eax)
fldl 48(%esp)
fstpl 48(%eax)
fldl -120(%edx)
fstpl 56(%eax)
fldl -112(%edx)
fstpl 64(%eax)
fldl -104(%edx)
fstpl 72(%eax)
fldl -96(%edx)
fstpl 80(%eax)
fldl -88(%edx)
fstpl 88(%eax)
fldl -80(%edx)
fstpl 96(%eax)
fldl -72(%edx)
fs


0: No protection
  *            @arg OB_RDP_LEVEL_1: Read protection of the memory
  *            @arg OB_RDP_LEVEL_2: Full chip protection
  */
static uint8_t FLASH_OB_GetRDP(void)
{
  uint8_t readstatus = OB_RDP_LEVEL_0;

  if((*(__IO uint8_t*)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_2))
  {
    readstatus = OB_RDP_LEVEL_2;
  }
  else if((*(__IO uint8_t*)(OPTCR_BYTE1_ADDRESS) == (uint8_t)OB_RDP_LEVEL_1))
  {
    readstatus = OB_RDP_LEVEL_1;
  }
  else
  {
    readstatus = OB_RDP_LEVEL_0;
  }

  return readstatus;
}

/**
  * @brief  Returns the FLASH BOR level.
  * @retval uint8_t The FLASH BOR level:
  *           - OB_BOR_LEVEL3: Supply voltage ranges from 2.7 to 3.6 V
  *           - OB_BOR_LEVEL2: Supply voltage ranges from 2.4 to 2.7 V
  *           - OB_BOR_LEVEL1: Supply voltage ranges from 2.1 to 2.4 V
  *           - OB_BOR_OFF   : Supply voltage ranges from 1.62 to 2.1 V
  */
static uint8_t FLASH_OB_GetBOR(void)
{
  /* Return the FLASH BOR level */
  return (uint8_t)(*(__IO uint8_t *)(OPTCR_BYTE0_ADDRESS) & (uint8_t)0x0CU);
}

/**
  * @brief  Flush the instruction and data caches
  * @retval None
  */
void FLASH_FlushCaches(void)
{
  /* Flush instruction cache  */
  if(READ_BIT(FLASH->ACR, FLASH_ACR_ICEN)!= RESET)
  {
    /* Disable instruction cache  */
    __HAL_FLASH_INSTRUCTION_CACHE_DISABLE();
    /* Reset instruction cache */
    __HAL_FLASH_INSTRUCTION_CACHE_RESET();
    /* Enable instruction cache */
    __HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
  }

  /* Flush data cache */
  if(READ_BIT(FLASH->ACR, FLASH_ACR_DCEN) != RESET)
  {
    /* Disable data cache  */
    __HAL_FLASH_DATA_CACHE_DISABLE();
    /* Reset data cache */
    __HAL_FLASH_DATA_CACHE_RESET();
    /* Enable data cache */
    __HAL_FLASH_DATA_CACHE_ENABLE();
  }
}

/**
  * @}
  */

#endif /* HAL_FLASH_MODULE_ENABLED */

/**
  * @}
  */

/**
  * @}
  */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/