 := chainCfg.Opts[MaxGasPriceOpt]; ok {
		price, parseErr := utils.ParseUint256OrHex(&gasPrice)
		if parseErr != nil {
			return nil, fmt.Errorf("unable to parse max gas price, %w", parseErr)
		}

		config.maxGasPrice = price
		delete(chainCfg.Opts, MaxGasPriceOpt)
	}

	if minGasPrice, ok := chainCfg.Opts[MinGasPriceOpt]; ok {
		price, parseErr := utils.ParseUint256OrHex(&minGasPrice)
		if parseErr != nil {
			return nil, fmt.Errorf("unable to parse min gas price, %w", parseErr)
		}

		config.minGasPrice = price
		delete(chainCfg.Opts, MinGasPriceOpt)
	}

	if gasLimit, ok := chainCfg.Opts[GasLimitOpt]; ok {
		limit, parseErr := utils.ParseUint256OrHex(&gasLimit)
		if parseErr != nil {
			return nil, fmt.Errorf("unable to parse gas limit, %w", parseErr)
		}

		config.gasLimit = limit
		delete(chainCfg.Opts, GasLimitOpt)
	}

	if gasMultiplier, ok := chainCfg.Opts[GasMultiplier]; ok {
		multilier := big.NewFloat(1)
		_, pass := multilier.SetString(gasMultiplier)
		if pass {
			config.gasMultiplier = multilier
			delete(chainCfg.Opts, GasMultiplier)
		} else {
			return nil, errors.New("unable to parse gasMultiplier to float")
		}
	}

	if HTTP, ok := chainCfg.Opts[HttpOpt]; ok && HTTP == "true" {
		config.http = true
		delete(chainCfg.Opts, HttpOpt)
	} else if HTTP, ok := chainCfg.Opts[HttpOpt]; ok && HTTP == "false" {
		config.http = false
		delete(chainCfg.Opts, HttpOpt)
	}

	if startBlock, ok := chainCfg.Opts[StartBlockOpt]; ok && startBlock != "" {
		block := big.NewInt(0)
		_, pass := block.SetString(startBlock, 10)
		if pass {
			config.startBlock = block
			delete(chainCfg.Opts, StartBlockOpt)
		} else {
			return nil, fmt.Errorf("unable to parse %s", StartBlockOpt)
		}
	}

	if blockConfirmations, ok := chainCfg.Opts[BlockConfirmationsOpt]; ok && blockConfirmations != "" {
		val := big.NewInt(DefaultBlockConfirmations)
		_, pass := val.SetString(blockConfirmations, 10)
		if pass {
			config.blockConfirmations = val
			delete(chainCfg.Opts, BlockConfirmationsOpt)
		} else {
			return nil, fmt.Errorf("unable to parse %s", BlockConfirmationsOpt)
		}
	} else {
		config.blockConfirmations = big.NewInt(DefaultBlockConfirmations)
		delete(chainCfg.Opts, BlockConfirmationsOpt)
	}

	if gsnApiKey, ok := chainCfg.Opts[EGSApiKey]; ok && gsnApiKey != "" {
		config.egsApiKey = gsnApiKey
		delete(chainCfg.Opts, EGSApiKey)
	}

	if speed, ok := chainCfg.Opts[EGSSpeed]; ok && speed == egs.Average || speed == egs.Fast || speed == egs.Fastest {
		config.egsSpeed = speed
		delete(chainCfg.Opts, EGSSpeed)
	} else {
		// Default to "fast"
		config.egsSpeed = egs.Fast
		delete(chainCfg.Opts, EGSSpeed)
	}

	if len(chainCfg.Opts) != 0 {
		return nil, fmt.Errorf("unknown Opts Encountered: %#v", chainCfg.Opts)


terial material, inout ReflectedLight reflectedLight ) {
	float dotNL = saturate( dot( geometryNormal, directLight.direction ) );
	vec3 irradiance = dotNL * directLight.color;
	#ifdef USE_CLEARCOAT
		float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );
		vec3 ccIrradiance = dotNLcc * directLight.color;
		clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );
	#endif
	#ifdef USE_SHEEN
		sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );
	#endif
	reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );
	reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {
	reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
}
void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {
	#ifdef USE_CLEARCOAT
		clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );
	#endif
	#ifdef USE_SHEEN
		sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );
	#endif
	vec3 singleScattering = vec3( 0.0 );
	vec3 multiScattering = vec3( 0.0 );
	vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
	#ifdef USE_IRIDESCENCE
		computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );
	#else
		computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );
	#endif
	vec3 totalScattering = singleScattering + multiScattering;
	vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );
	reflectedLight.indirectSpecular += radiance * singleScattering;
	reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;
	reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;
}
#define RE_Direct				RE_Direct_Physical
#define RE_Direct_RectArea		RE_Direct_RectArea_Physical
#define RE_IndirectDiffuse		RE_IndirectDiffuse_Physical
#define RE_IndirectSpecular		RE_IndirectSpecular_Physical
float computeSpec


2 L4,10.5 L9.6896894,10.4996894 L3.75735931,4.56801948 C3.46446609,4.27512627 3.46446609,3.80025253 3.75735931,3.50735931 C4.05025253,3.21446609 4.52512627,3.21446609 4.81801948,3.50735931 Z"/></svg>';

  var EMPTY_MARKER = 'bjs-drilldown-empty';

  /**
   * @param {Canvas} canvas
   * @param {EventBus} eventBus
   * @param {ElementRegistry} elementRegistry
   * @param {Overlays} overlays
   */
  function DrilldownOverlayBehavior(
      canvas, eventBus, elementRegistry, overlays
  ) {
    CommandInterceptor.call(this, eventBus);

    this._canvas = canvas;
    this._eventBus = eventBus;
    this._elementRegistry = elementRegistry;
    this._overlays = overlays;

    var self = this;

    this.executed('shape.toggleCollapse', LOW_PRIORITY$n, function(context) {
      var shape = context.shape;

      // Add overlay to the collapsed shape
      if (self._canDrillDown(shape)) {
        self._addOverlay(shape);
      } else {
        self._removeOverlay(shape);
      }
    }, true);

    this.reverted('shape.toggleCollapse', LOW_PRIORITY$n, function(context) {
      var shape = context.shape;

      // Add overlay to the collapsed shape
      if (self._canDrillDown(shape)) {
        self._addOverlay(shape);
      } else {
        self._removeOverlay(shape);
      }
    }, true);

    this.executed([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY$n,
      function(context) {
        var oldParent = context.oldParent,
            newParent = context.newParent || context.parent,
            shape = context.shape;

        // Add overlay to the collapsed shape
        if (self._canDrillDown(shape)) {
          self._addOverlay(shape);
        }

        self._updateDrilldownOverlay(oldParent);
        self._updateDrilldownOverlay(newParent);
        self._updateDrilldownOverlay(shape);
      }, true);

    this.reverted([ 'shape.create', 'shape.move', 'shape.delete' ], LOW_PRIORITY$n,
      function(context) {
        var oldParent = context.oldParent,
            newParent = context.newParent || context.parent,
            shape = context.shape;

        // Add overlay to the collapsed shape
        if (self._canDrillDown(shape)) {
          self._addOverlay(shape);
        }

        self._updateDrilldownOverlay(oldParent);
        self._updateDrilldownOverlay(newParent);
        self._updateDrilldownOverlay(shape);
      }, true);

    eventBus.on('import.render.complete', function() {
      elementRegistry.filter(function(e) {
        return self._canDrillDown(e);
      }).map(function(el) {
        self._addOverlay(el);
      });
    });

  }

  e$3(DrilldownOverlayBehavior, CommandInterceptor);

  /**
   * @param {Shape} shape
   */
  DrilldownOverlayBehavior.prototype._updateDrilldownOverlay = function(shape) {
    var canvas = this._canvas;

    if (!shape) {
      return;
    }

    var root = canvas.findRoot(shape);

    if (root) {
      this._updateOverlayVisibility(root);
    }
  };

  /**
   * @param {Element} element
   *
   * @return {boolean}
   */
  DrilldownOverlayBehavior.prototype._canDrill


yte 0x63, 0x68
	.byte 0x61, 0x72, 0x2F, 0x79, 0x62, 0x42, 0x67, 0x53, 0x74, 0x65, 0x70, 0x31, 0x31, 0x2E, 0x6E, 0x63
	.byte 0x6C, 0x2E, 0x6C, 0x00

ov13_02245364: ; 0x02245364
	.byte 0x01, 0x02, 0x03, 0x00, 0xE0, 0x00, 0x84, 0x00

ov13_0224536C: ; 0x0224536C
	.byte 0x63, 0x68, 0x61, 0x72
	.byte 0x2F, 0x79, 0x62, 0x42, 0x67, 0x4F, 0x70, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x6E, 0x63, 0x6C, 0x2E
	.byte 0x6C, 0x00

ov13_02245382: ; 0x02245382
	.byte 0x63, 0x68, 0x61, 0x72, 0x2F, 0x79, 0x62, 0x42, 0x67, 0x4F, 0x70, 0x74, 0x69, 0x6F
	.byte 0x6E, 0x31, 0x2E, 0x6E, 0x63, 0x6C, 0x2E, 0x6C, 0x00, 0x00

ov13_0224539A: ; 0x0224539A
	.byte 0x08, 0x00, 0x24, 0x00, 0xF8, 0x00
	.byte 0x44, 0x00, 0x08, 0x00, 0x50, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x08, 0x00, 0x7C, 0x00, 0xF8, 0x00
	.byte 0x9C, 0x00

ov13_022453B2: ; 0x022453B2
	.byte 0x06, 0x00

ov13_022453B4: ; 0x022453B4
	.byte 0x22, 0x00

ov13_022453B6: ; 0x022453B6
	.byte 0xEA, 0x00

ov13_022453B8: ; 0x022453B8
	.byte 0x36, 0x00, 0x06, 0x00, 0x4E, 0x00, 0xEA, 0x00
	.byte 0x62, 0x00, 0x06, 0x00, 0x7A, 0x00, 0xEA, 0x00, 0x8E, 0x00, 0x00, 0x00

ov13_022453CC: ; 0x022453CC
	.byte 0x02

ov13_022453CD: ; 0x022453CD
	.byte 0x63, 0x68, 0x61
	.byte 0x72, 0x2F, 0x79, 0x62, 0x42, 0x67, 0x53, 0x74, 0x65, 0x70, 0x33, 0x31, 0x2E, 0x6E, 0x63, 0x6C
	.byte 0x2E, 0x6C, 0x00

ov13_022453E3: ; 0x022453E3
	.byte 0x63, 0x68, 0x61, 0x72, 0x2F, 0x78, 0x62, 0x34, 0x41, 0x70, 0x4C, 0x69, 0x73
	.byte 0x74, 0x42, 0x61, 0x63, 0x6B, 0x2E, 0x6E, 0x73, 0x63, 0x2E, 0x6C, 0x00

ov13_022453FC: ;


: 'VK_NUMPAD2',
  0x0007005b: 'VK_NUMPAD3',
  0x0007005c: 'VK_NUMPAD4',
  0x0007005d: 'VK_NUMPAD5',
  0x0007005e: 'VK_NUMPAD6',
  0x0007005f: 'VK_NUMPAD7',
  0x00070060: 'VK_NUMPAD8',
  0x00070061: 'VK_NUMPAD9',
  0x00070062: 'VK_NUMPAD0',
  0x00070063: 'VK_DECIMAL',
  0x00070075: 'VK_HELP',
  0x00070077: 'VK_SELECT',
  0x00070088: 'VK_KANA',
  0x0007008a: 'VK_CONVERT',
  0x000700e0: 'VK_CONTROL',
  0x000700e1: 'VK_SHIFT',
  0x000700e2: 'VK_MENU',
  0x000700e3: 'Meta',
  0x000700e4: 'RControl',
  0x000700e5: 'RShift',
  0x000700e6: 'RAlt',
  0x000700e7: 'RWin',
  0x000c00b1: 'VK_PAUSE',
  0x000c00cd: 'VK_PAUSE',
  0x000c019e: 'LOCK_SCREEN',
  0x000c0208: 'VK_PRINT',
};

/// The windows targets in the publish time order.
enum WindowsTarget {
  naw, // not a windows target
  xp,
  vista,
  w7,
  w8,
  w8_1,
  w10,
  w11
}

/// A convenient method to transform a build number to the corresponding windows version.
extension WindowsTargetExt on int {
  WindowsTarget get windowsVersion => getWindowsTarget(this);
}

const kCheckSoftwareUpdateFinish = 'check_software_update_finish';
import 'dart:convert';
import 'dart:js' as js;

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

import 'package:flutter_hbb/models/model.dart' as model;

class CursorData {
  final String key;
  final String url;
  final double hotX;
  final double hotY;
  final int width;
  final int height;

  CursorData({
    required this.key,
    required this.url,
    required this.hotX,
    required this.hotY,
    required this.width,
    required this.height,
  });
}

/// The cursor manager
class CursorManager {
  final Map<String, CursorData> _cursors = <String, CursorData>{};
  String latestKey = '';

  CursorManager._();
  static CursorManager instance = CursorManager._();

  Future<void> registerCursor(CursorData data) async {
    _cursors[data.key] = data;
  }

  Future<void> deleteCursor(String key) async {
    _cursors.remove(key);
  }

  Future<void> setSystemCursor(String key)


s or sets the raw value of the integer, in network byte order.
		/// </summary>
		public uint NetworkOrderValue
		{
			get => this.value;
			set => this.value = value;
		}
		/// <summary>
		/// Gets or sets the value of the integer, in the order of the CPU architecture.
		/// </summary>
		public uint Value
		{
			get => BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(this.value) : this.value;
			set => this.value = BitConverter.IsLittleEndian ? BinaryPrimitives.ReverseEndianness(value) : value;
		}

		/// <inheritdoc/>
		public override string ToString()
			=> this.Value.ToString();
	}
}


, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package org.elastos.did.exception;

public class MalformedMetaException extends DIDStoreException {
	private static final long serialVersionUID = 3633945564100769501L;

	public MalformedMetaException() {
        super();
    }

    public MalformedMetaException(String message) {
        super(message);
    }

    public MalformedMetaException(String message, Throwable cause) {
        super(message, cause);
    }

    public MalformedMetaException(Throwable cause) {
        super(cause);
    }
}
/*
 * Copyright (c) 2019 Elastos Foundation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package org.elastos.did.metadata;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.text.ParseException;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

import org.elastos.did.DIDStore;
import org.elastos.did.exception.MalformedMetaException;
import org.elastos.did.util.JsonHelper;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public abstract class AbstractMetadata extends TreeMap<String, Object> {
	private static final long serialVersionUID = -3700036981800046481L;

	protected final static String RESERVED_PREFIX = "DX-";
	private final static String LAST_MODIFIED = RESERVED_PREFIX + "lastModified";

	private DIDStore store;

	protected AbstractMetadata(DIDStore store) {
		this.store = store;
	}

	public void setStore(DIDStore store) {
		this.store = store;
	}

	public DIDStore getStore() {
		return store;
	}

	public boolean attachedStore() {
		return store != null;
	}

	public void setLastModified(Date timestamp) {
		put(LAST_MODIFIED, JsonHelper.formatDate(timestamp));
	}

	public Date getLastModified() {
		try {
			String lastModified = (String)get(LAST_MODIFIED);
			return lastModified == null ? null : JsonHelper.parseDate(lastModified);
		} catch (ParseException e) {
			return null;
		}
	}

	public void clearLastModified() {
		remove(LAST_MODIFIED);
	}

	public void setExtra(String key, String value) {
		if (key ==


Action<Message> onMessage)
        {
            if (messages == null)
            {
                throw new ArgumentNullException("messages");
            }

            if (onMessage == null)
            {
                throw new ArgumentNullException("onMessage");
            }

            Enumerate<object>(messages, message => true, (state, message) => onMessage(message), state: null);
        }

        public static void Enumerate<T>(this IList<ArraySegment<Message>> messages, Func<Message, bool> filter, Action<T, Message> onMessage, T state)
        {
            if (messages == null)
            {
                throw new ArgumentNullException("messages");
            }

            if (filter == null)
            {
                throw new ArgumentNullException("filter");
            }

            if (onMessage == null)
            {
                throw new ArgumentNullException("onMessage");
            }

            for (int i = 0; i < messages.Count; i++)
            {
                ArraySegment<Message> segment = messages[i];
                for (int j = segment.Offset; j < segment.Offset + segment.Count; j++)
                {
                    Message message = segment.Array[j];

                    if (filter(message))
                    {
                        onMessage(state, message);
                    }
                }
            }
        }
    }
}


"""
@Time    : 2018/8/29 19:08
@Author  : 郭家兴
@Email   : 302802003@qq.com
@File    : opreation_excel.py
@Desc    :操作excel
"""
import xlrd
from xlutils.copy import copy

class OperationExcel:
    def __init__(self,file_name):
        self.workbook = self.get_workbook(file_name)

    def get_workbook(self,file_name):
        workbook = xlrd.open_workbook(file_name)
        return workbook

    def get_table(self,workbook,sheet_name=None,sheet_id=0):
        table = workbook.sheets()[sheet_id]
        if sheet_name:
            table = workbook.sheet_by_name(sheet_name)
        return table

    def get_rows(self,table):
        rows = table.nrows
        return rows

    def get_cols(self,table):
        cols = table.ncols
        return cols

    def get_cell_value(self,table,x,y):
        cell_value = table.cell_value(x, y)
        return cell_value

    def write_execel(self,workbook,sheetid,row,col,value):
        workbook_copy = copy(workbook)
        sheet_write = workbook_copy.get_sheet(sheetid)
        sheet_write.write(row,col,value)
        workbook_copy.save(self.file_name)


: *account_id,
						privilege,
					});
					GroupPrivileges::<T>::iter()
						.filter(|(_, group_privileges)| group_privileges.contains(privilege))
						.for_each(|(group_id, _)| {
							let _ = <Self as MutatePrivilegeGroup>::revoke(group_id, account_id);
						});
				}
				Ok(())
			})
		}
	}

	impl<T: Config> InspectPrivilegeGroup for Pallet<T> {
		type AccountId = AccountIdOf<T>;
		type GroupId = T::GroupId;
		type Group = BoundedVec<Self::AccountId, T::MaxMember>;

		fn privilege(group_id: Self::GroupId) -> Result<Privilege, DispatchError> {
			GroupPrivileges::<T>::try_get(group_id).map_err(|_| Error::<T>::GroupNotFound.into())
		}

		fn members(group_id: Self::GroupId) -> Result<PrivilegedGroupOf<Self>, DispatchError> {
			GroupMembers::<T>::try_get(group_id).map_err(|_| Error::<T>::GroupNotFound.into())
		}

		fn is_privileged(
			group_id: Self::GroupId,
			account_id: Self::AccountId,
		) -> Result<bool, DispatchError> {
			let members = Self::members(group_id)?;
			Ok(members.contains(&account_id))
		}
	}

	impl<T: Config> MutatePrivilegeGroup for Pallet<T> {
		fn create(
			group: PrivilegedGroupOf<Self>,
			privilege: Privilege,
		) -> Result<Self::GroupId, DispatchError> {
			ensure!(GroupCount::<T>::get() < T::MaxGroup::get(), Error::<T>::TooManyGroup);
			GroupId::<T>::try_mutate(|previous_group_id| {
				let group_id = previous_group_id.next();
				*previous_group_id = group_id;

				GroupCount::<T>::mutate(|x| *x += 1);
				GroupPrivileges::<T>::insert(group_id, privilege);
				// NOTE(hussein-aitlahcen): we don't know if it's correctly sorted at creation,
				// hence we promote member per member.
				GroupMembers::<T>::insert(group_id, BoundedVec::with_bounded_capacity(group.len()));
				Self::deposit_event(Event::GroupCreated { group_id, privilege });

				for member in group {
					<Self as MutatePrivilegeGroup>::promote(group_id, &member)?;
				}

				Ok(group_id)
			})
		}

		fn delete(group_id: Self::GroupId) -> DispatchResult {
			GroupCount::<T>::mutate(|x| *x -= 1);
			GroupPrivileges::<T>::remove(group_id);
			GroupMembers::<T>::remove(group_id);
			Self::deposit_event(Event::GroupDeleted { group_id });
			Ok(())
		}

		/* NOTE(hussein-aitlahcen):
			I don't know whether promoting a user to a group
			automatically adjust it's privilege to the group?
			The code is currently assuming that there is two distinct steps right now.
			First getting a privilege promotion, and then getting promoted to a group.
		*/
		fn promote(group_id: Self::GroupId, account_id: &Self::AccountId) -> DispatchResult {
			let privilege = Self::privilege(group_id)?;
			ensure!(Self::has_privilege(account_id, privilege), Error::<T>::GroupPrivilegeNotHeld);
			GroupMembers::<T>::try_mutate(group_id, |group| {
				// Match to make it clear that in case of Ok => already present
				match group.binary_search(account_id) {
					Ok(_) => Err(Error::<T>::AlreadyGroupMember.into()),
					Err(i) => {
						group.try_insert(i, *account_id).map_err(|_| Error::<T>::Too


# Generated by Django 5.2.6 on 2025-09-30 03:22

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models

class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='BagType',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('modified_at', models.DateTimeField(auto_now=True)),
                ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
                ('browser_info', models.CharField(blank=True, max_length=255, null=True)),
                ('session', models.IntegerField(choices=[(2020, '2020'), (2021, '2021'), (2022, '2022'), (2023, '2023'), (2024, '2024'), (2025, '2025'), (2026, '2026'), (2027, '2027'), (2028, '2028'), (2029, '2029'), (2030, '2030'), (2031, '2031'), (2032, '2032'), (2033, '2033'), (2034, '2034')], default=2025)),
                ('name', models.CharField(max_length=255)),
                ('per_bag_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('per_kg_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('agent_bag_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('agent_kg_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('party_bag_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('party_kg_rent', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('per_bag_loan', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('empty_bag_rate', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('fan_charge', models.DecimalField(decimal_places=2, default=0, max_digits=10)),
                ('is_default', models.BooleanField(default=False)),
                ('is_active', models.BooleanField(default=True)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL)),
                ('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_modified', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
    ]


ython27() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython27));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython27x64() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython27x64));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython35() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython35));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython35x64() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython35x64));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython36() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython36));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython36x64() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython36x64));
        }

        [TestMethod, Priority(UITestPriority.P2)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython37() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython37));
        }

        [TestMethod, Priority(UITestPriority.P2)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython37x64() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython37x64));
        }

        [TestMethod, Priority(UITestPriority.P2)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython38() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython37));
        }

        [TestMethod, Priority(UITestPriority.P2)]
        [TestCategory("Installed")]
        public void BuiltinsProfilePython38x64() {
            _vs.RunTest(nameof(PUIT.BuiltinsProfilePython37x64));
        }

        [TestMethod, Priority(UITestPriority.P0_FAILING_UI_TEST)]
        [TestCategory("Installed")]
        public void LaunchExecutableUsingInterpreterGuid() {
            _vs.RunTest(nameof(PUIT.LaunchExecutableUsingInterpreterGuid));
        }
    }
}


 (msg: string, keepLine?: boolean) => log(msg, 'red', !!keepLine),
  log: (msg: string, keepLine?: boolean) => log(msg, null, !!keepLine),
  ok: (msg: string, keepLine?: boolean) => log(msg, 'green', !!keepLine),
  warn: (msg: string, keepLine?: boolean) => log(msg, 'yellow', !!keepLine)
};

export default logger;
export class SimpleResponse {
    constructor(state: boolean, desc: string = null) {
        this.state = state;
        this.desc = desc;
    }

    toJSON(): string {
        return JSON.stringify(this);
    }

    readonly state: boolean;
    readonly desc: string;
}import { Body, Controller, Delete, Get, Post, Put, Query } from '@nestjs/common';
import { ApiBody, ApiQuery, ApiResponse } from '@nestjs/swagger/dist';
import taskEntity from 'src/db/entity/task.entity';
import CreateTaskDto from 'src/todo/dto/create-task.dto';
import { TaskService } from './task.service';

@Controller('task')
export default class TaskController {
  constructor(private readonly taskService: TaskService) {}

  @ApiResponse({
    status: 201,
    description: 'returns the created task'
  })
  @Post('post')
  insertTask(@Body() task: CreateTaskDto) {
    return this.taskService.insert(task);
  }

  @ApiResponse({
    status: 200,
    description: 'returns all the tasks'
  })
  @Get()
  getAlltasks() {
    return this.taskService.getAllTasks();
  }

  @ApiResponse({
    status: 200,
    description: 'removes the task with provided task ID and returns the removed task'
  })
  @ApiQuery({
    name: 'taskID',
    required: true,
    type: Number
  })
  @Delete('delete')
  deletetask(@Query('taskID') taskID): Promise<taskEntity> {
    return this.taskService.delete(taskID);
  }

  @ApiResponse({
    status: 200,
    description: 'updates the task given its task id and the task object that has to be replaced'
  })
  @ApiQuery({
    name: 'taskID',
    required: true,
    type: Number
  })
  @Put('update')
  updatetask(@Query('taskID') taskID, @Body() task: CreateTaskDto): Promise<taskEntity> {
    return this.taskService.update(taskID, task);
  }
}import { encode, decode } from "./codec";

test("encode", () => {
  const data = {
    id: "1",
    type: "person",
    name: "David",
    properties: {
      nickname: "Dave",
      age: 32
    }
  };

  expect(encode(data, 0)).toEqual([
    ["person/1/id/0", '"1"'],
    ["person/1/type/0", '"person"'],
    ["person/1/name/0", '"David"'],
    ["person/1/properties/nickname/0", '"Dave"'],
    ["person/1/properties/age/0", "32"]
  ]);
});

test("decode", () => {
  const data = {
    id: "1",
    type: "person",
    name: "David",
    properties: {
      nickname: "Dave",
      age: 32
    }
  };

  expect(decode([
    ["person/1/id/0", '"1"'],
    ["person/1/type/0", '"person"'],
    ["person/1/name/0", '"David"'],
    ["person/1/properties/nickname/0", '"Dave"'],
    ["person/1/properties/age/0", "32"]
  ])).toEqual(data);
});
import io from "socket.io-client";

import { Logger } from "../utils";
import { CarpoolMethods } from "./methods";

export class RtmClient {
    private readonly _logger = new Logger("RtmClient");
    private readonly _socket: SocketIOClient.Socket;

    // methods


= document.createElement('span');
            sortfwdind.id = "sorttable_sortfwdind";
            sortfwdind.innerHTML = stIsIE ? '&nbsp6' : ' ▾';
            this.appendChild(sortfwdind);
            return;
          }

          // remove sorttable_sorted classes
          theadrow = this.parentNode;
          forEach(theadrow.childNodes, function(cell) {
            if (cell.nodeType == 1) { // an element
              cell.className = cell.className.replace('sorttable_sorted_reverse','');
              cell.className = cell.className.replace('sorttable_sorted','');
            }
          });
          sortfwdind = document.getElementById('sorttable_sortfwdind');
          if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
          sortrevind = document.getElementById('sorttable_sortrevind');
          if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }

          this.className += ' sorttable_sorted';
          sortfwdind = document.createElement('span');
          sortfwdind.id = "sorttable_sortfwdind";
          sortfwdind.innerHTML = stIsIE ? '&nbsp6' : ' ▾';
          this.appendChild(sortfwdind);

	        // build an array to sort. This is a Schwartzian transform thing,
	        // i.e., we "decorate" each row with the actual sort key,
	        // sort based on the sort keys, and then put the rows back in order
	        // which is a lot faster because you only do getInnerText once per row
	        row_array = [];
	        col = this.sorttable_columnindex;
	        rows = this.sorttable_tbody.rows;
	        for (var j=0; j<rows.length; j++) {
	          row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
	        }
	        /* If you want a stable sort, uncomment the following line */
	        //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
	        /* and comment out this one */
	        row_array.sort(this.sorttable_sortfunction);

	        tb = this.sorttable_tbody;
	        for (var j=0; j<row_array.length; j++) {
	          tb.appendChild(row_array[j][1]);
	        }

	        delete row_array;
	      });
	    }
    }
  },

  guessType: function(table, column) {
    // guess the type of a column based on its first non-blank row
    sortfn = sorttable.sort_alpha;
    for (var i=0; i<table.tBodies[0].rows.length; i++) {
      text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
      if (text != '') {
        if (text.match(/^-?[$]?[\d,.]+%?$/)) {
          return sorttable.sort_numeric;
        }
        // check for a date: dd/mm/yyyy or dd/mm/yy
        // can have / or . or - as separator
        // can be mm/dd as well
        possdate = text.match(sorttable.DATE_RE)
        if (possdate) {
          // looks like a date
          first = parseInt(possdate[1]);
          second = parseInt(possdate[2]);
          if (first > 12) {
            // definitely dd/mm
            return sorttable.sort_ddmm;
          } else if (second > 1


-link="internal">
													<picture><source data-lazy-srcset="https://comidinhasdochef.com/wp-content/webp-express/webp-images/doc-root/wp-content/uploads/2022/03/Pudim-no-Copinho-para-Festa-2.jpg.webp" type="image/webp"></picture>

Passo 3

Quando estiver em consistência de calda bem liquida desligue o fogo e aguarde esfriar;

													<picture><source data-lazy-srcset="https://comidinhasdochef.com/wp-content/webp-express/webp-images/doc-root/wp-content/uploads/2022/03/Pudim-no-Copinho-para-Festa-3.jpg.webp" type="image/webp"></picture>

Passo 4

Unte os copinhos (50 ml) com um fio de óleo e distribua toda a calda entre eles (cerca de 1 colher de sopa em cada) e reserve.

													<picture><source data-lazy-srcset="https://comidinhasdochef.com/wp-content/webp-express/webp-images/doc-root/wp-content/uploads/20


CLEAR_OUTPUT_PATH | false | boolean | Whether or not to clear out the output path before creating new files. Same as specifying `--empty-path` on the command |
| LMG_TABLE_NAMING_SCHEME | `[Timestamp]_create_[TableName]_table.php` | string | The string to be used to name table migration files |
| LMG_VIEW_NAMING_SCHEME | `[Timestamp]_create_[ViewName]_view.php` | string | The string to be used to name view migration files |
| LMG_OUTPUT_PATH | tests/database/migrations | string | The path (relative to the root of your project) to where the files will be output to. Same as specifying `--path=` on the command |
| LMG_SKIPPABLE_TABLES | migrations | comma delimited string | The tables to be skipped |
| LMG_SKIP_VIEWS | false | boolean | When true, skip all views |
| LMG_SKIPPABLE_VIEWS | '' | comma delimited string | The views to be skipped |
| LMG_SORT_MODE | 'foreign_key' | string | The sorting mode to be used. Options: `foreign_key` |
| LMG_PREFER_UNSIGNED_PREFIX | true | boolean | When true, uses `unsigned` variant methods instead of the `->unsigned()` modifier. |
| LMG_USE_DEFINED_INDEX_NAMES | true | boolean | When true, uses index names defined by the database as the name parameter for index methods |
| LMG_USE_DEFINED_FOREIGN_KEY_INDEX_NAMES | true | boolean | When true, uses foreign key index names defined by the database as the name parameter for foreign key methods |
| LMG_USE_DEFINED_UNIQUE_KEY_INDEX_NAMES | true | boolean | When true, uses unique key index names defined by the database as the name parameter for the `unique` methods |
| LMG_USE_DEFINED_PRIMARY_KEY_INDEX_NAMES | true | boolean | When true, uses primary key index name defined by the database as the name parameter for the `primary` method |
| LMG_WITH_COMMENTS | true | boolean | When true, export comment using `->comment()` method. |
| LMG_USE_DEFINED_DATATYPE_ON_TIMESTAMP | false | boolean | When false, uses `->timestamps()` by mashing up `created_at` and `updated_at` regardless of  datatype defined by the database |
| LMG_MYSQL_TABLE_NAMING_SCHEME | null | ?boolean | When not null, this setting will override LMG_TABLE_NAMING_SCHEME when the database driver is `mysql`. |
| LMG_MYSQL_VIEW_NAMING_SCHEME | null | ?boolean | When not null, this setting will override LMG_VIEW_NAMING_SCHEME when the database driver is `mysql`. |
| LMG_MYSQL_OUTPUT_PATH | null | ?boolean | When not null, this setting will override LMG_OUTPUT_PATH when the database driver is `mysql`. |
| LMG_MYSQL_SKIPPABLE_TABLES | null | ?boolean | When not null, this setting will override LMG_SKIPPABLE_TABLES when the database driver is `mysql`. |
| LMG_MYSQL_SKIPPABLE_VIEWS | null | comma delimited string | The views to be skipped when driver is `mysql` |
| LMG_SQLITE_TABLE_NAMING_SCHEME | null | ?boolean | When not null, this setting will override LMG_TABLE_NAMING_SCHEME when the database driver is `sqlite`. |
| LMG_SQLITE_VIEW_NAMING_SCHEME | null | ?boolean | When not null, this setting will override LMG_VIEW_NAMING_SCHEME when the database driver is `sqlite`. |
| LMG_SQLITE_OUTPUT_PATH | null | ?boolean | When not null, this setting will override LMG_OUTPUT_PATH when the database driver is `sqlite`. |
| LMG_SQLITE_SKIPPABLE_TABLES | null | ?boolean | When not null, this setting will override LMG_SKIPPABLE_TABLES when the databa


siinaya dhaqaalaha wareegtada hab cusub (lacag-bixinaha faafreebka u adkaysta, macaamilada p2p, iwm.), waxay u keentaa gabi ahaanba awood u gaar ah kuwa raba inay dhisaan oo ku lug yeeshaan dhaqaale wareeg ah.
\n
1. Monero waxa ay awood u siisaa macaamilka p2p ee caalamiga ah iyada oo aan cabsi laga qabin ilaalinta ama faafreebka
\n
 Isticmaalayaasha Monero uma baahna inay ka werweraan ilaalo ballaaran ama xitaa faafreeb la bar tilmaameedsado ganacsigooda, taasoo u sahlaysa nabadda gaarka ah ee maskaxda iyo ka hortagga culeys kasta oo ku yimaada ganacsiga. Waxaad la macaamili kartaa qof kasta oo adduunka ah, wakhti kasta, adigoon wax ilaalin ah isticmaalin jeebka Monero ee doorashadaada.
\n
2. Fungibility waxay meesha ka saartaa khatarta qadaadiicda wasakhaysan waxayna hubisaa kalsoonida
\n
 Maaddaama Monero uu yahay mid fungible (1 XMR waxay la mid tahay 1 XMR, si kastaba ha ahaatee), ka qaybgalayaasha dhaqaalaha wareegtada uma baahna inay ka welwelaan lacagaha ay dirayaan ama helayaan. Monero kasta oo ay soo diraan dib looguma soo celin karo macaamilkooda kale mana laha wax taariikh ah sidaas darteed lama faafreeb karo iyada oo lagu saleynayo taariikhda, Monero waxay heshay mar walba waxay awood u yeelan doontaa in si xor ah loogu isticmaalo qiimaha suuqa. Fungibility Tani waxay ku daraysaa nabada maskaxda ee ka qaybgalayaasha, waxay hubisaa in shirkadaha falanqaynta silsiladda ah ayan ku qasbi karin jidkooda dhaqaale wareeg ah, oo waxay ka hortagtaa burburka kalsoonida Monero sida habka sarrifka.
\n
 Burburka hadda jira ee kalsoonida Bitcoin oo ah habka wax-is-weydaarsiga ayaa horseedaya inay si degdeg ah u lumiso dhaqdhaqaaqa dhaqaalaha wareegtada ah ee Monero uu joogo. Dadku ma rabaan inay lacag ku hubiyaan wasakhnimo, ka walwalaan haddii ay awood u yeelan doonaan inay si xor ah u kharash gareeyaan, ama dareemaan baahida loo qabo isticmaalka qalab kasta oo falanqaynta silsiladda si ay naftooda uga ilaaliyaan arrimaha sharciga ama sharciyeed.
\n
3. Khidmadaha hooseeya ee Monero waxay xaqiijiyaan socodka ganacsiga bilaashka ah
\n
 Mid ka mid ah qodobbada ugu fudud ee lagu fahmi karo macaamilka Monero ayaa ah in khidmadaha wax kala iibsiga ay aad u hooseeyaan waxayna ahaan doonaan kuwo macquul ah muddada fog


://limbopro.com/usr/uploads/2025/05/2475097206.png)
![YkkkCloud机场近期测速记录-2025年4月8日.png](https://limbopro.com/usr/uploads/2025/04/275580340.png)
![YkkkCloud机场近期测速记录-2025年3月6日.png](https://limbopro.com/usr/uploads/2025/03/3276252526.png)
- [最新测速记录](https://limbopro.com/865.html)

### 套餐价格

| 周期 - 150G | 周期 - 300G | 周期 - 500G |
| --- | --- | --- |
| 150GB/月 | 300GB/月 | 500GB/月 |
| 14~~¥ 10.5~~~/月付 | 26~~¥ 21~~/月付 | 40~~¥ 34.5~~/月付 |
| 订单日重置流量 | 同   | 同   |
| 不限制在线设备 | 同   | 同   |

套餐价格调整于：03.16.2025；各套餐涨价幅度 ¥3.5-5.5 ~~每月少喝一杯蜜雪柠檬水~~；

> **机场创建于**：2023年02月19日；
**chatGPT解锁适用**：适用，处于积极解锁状态；
**流媒体解锁适用**：Netflix/Disney+/Youtube等常规流媒体解锁；
**新疆地区用户适用**：适用；（由于该地区情况特殊且多变，购买前**请咨询机场**页面右下角客服新疆地区用户是否仍然适用）；
**单位每元可使用流量**：折后约合14-142Gb/元；
**节点倍率**：1倍率，0.5倍率，0.1倍率；
**支持协议**：~~Trojan协议~~ -> V2Ray(VLESS)，更新于2025年7月；
**游戏加速**：可以；
**节点特性**：华东华北多地入口 -> AWS国际出口 -> BGP落地；稳定有保证；

> 如遇官网打不开，可尝试切换节点后再次访问官网；

> “应近期订阅地址泄漏风险，我们已对订阅链接进行全面更新。**原有地址现已停止服务，请您尽快前往官网获取最新订阅地址，以保证服务的正常使用。**<br>
感谢您的理解与配合，如有任何疑问，欢迎随时联系我们。” 08.15.2025

> 已恢复；~~由于我们的失误，导致官网及 Emby 服务出现宕机。目前我们已第一时间启动抢修流程，正在全力恢复服务。 由此给大家带来的不便，我们深表歉意，感谢大家的理解与支持 19:24 06.26.2025;~~

> **目前可用状态**：可


766.23ms   @   391,526,446.82 op/s
  array-map    ⇝   4,190.51ms   @    71,590,348.74 op/s
  fastjs.map   ⇝   1,004.15ms   @   298,759,805.33 op/s
  lodash.map   ⇝   1,097.94ms   @   273,238,096.81 op/s
  ramda.map    ⇝   1,008.89ms   @   297,357,426.48 op/s
```
</details>

<details>
<summary>:white_check_mark: ↝ Numbers</summary>

```
Benchmark: code/map.js • Array<number>(100)
  native       ⇝   42.98ms   @    69,806,968.84 op/s
  @arr/map     ⇝   11.45ms   @   261,994,661.42 op/s
  arr-map      ⇝   10.98ms   @   273,181,897.07 op/s
  array-map    ⇝   42.89ms   @    69,942,480.24 op/s
  fastjs.map   ⇝   11.93ms   @   251,489,720.32 op/s
  lodash.map   ⇝   11.74ms   @   255,627,294.04 op/s
  ramda.map    ⇝   15.82ms   @   189,659,882.30 op/s

Benchmark: code/map.js • Array<number>(500)
  native       ⇝   211.13ms   @    71,045,162.68 op/s
  @arr/map     ⇝    51.38ms   @   291,960,255.41 op/s
  arr-map      ⇝    45.45ms   @   330,021,632.26 op/s
  array-map    ⇝   211.12ms   @    71,048,455.43 op/s
  fastjs.map   ⇝    53.38ms   @   281,002,552.66 op/s
  lodash.map   ⇝    56.48ms   @   265,571,351.27 op/s
  ramda.map    ⇝    58.98ms   @   254,305,545.47 op/s

Benchmark: code/map.js • Array<number>(1000)
  native       ⇝   418.29ms   @    71,719,793.92 op/s
  @arr/map     ⇝   102.46ms   @   292,807,014.16 op/s
  arr-map      ⇝    81.95ms   @   366,078,430.69 op/s
  array-map    ⇝   420.38ms   @    71,363,595.05 op/s
  fastjs.map   ⇝   102.36ms   @   293,097,226.19 op/s
  lodash.map   ⇝   111.39ms   @   269,324,410.22 op/s
  ramda.map    ⇝   109.91ms   @   272,943,314.80 op/s

Benchmark: code/map.js • Array<number>(5000)
  native       ⇝   2,116.36ms   @    70,876,302.91 op/s
  @arr/map     ⇝     505.97ms   @   296,462,674.37 op/s
  arr-map      ⇝     390.96ms   @   383,666,223.89 op/s
  array-map    ⇝   2,120.55ms   @    70,736,280.60 op/s
  fastjs.map   ⇝     511.17ms   @   293,443,612.83 op/s
  lodash.map   ⇝     551.78ms   @   271,847,985.36 op/s
  ramda.map    ⇝     513.60ms   @   292,055,


 W2087[] =
{
	0x00,0x00,0x23,0xa0,0x21,0x40,
	0x1e,0xe0,0x1c,0x80,0x1a,0x20,
	0x17,0xc0,0x15,0x60,0x13,0x00
};
static unsigned char W2105[] =
{
	0x13,0x00,0x10,0xa0,0x0e,0x40,
	0x0b,0xe0,0x09,0x80,0x07,0x20,
	0x04,0xc0,0x02,0x60,0x00,0x00
};
static unsigned char B2123[] =
{
	0x63,0x43,0xa3,0xf2,0x42,
	0x02,0x41,0x01,0x40
};
static unsigned char B2132[] =
{
	0x28,0x47,0x66,0x06,0x25,0x44,
	0x63,0x03,0x22,0x41,0x60,0x00
};
static unsigned char B2144[] =
{
	0x14,0x73,0x43,0x03,0x42,
	0x02,0x41,0x01,0x40,0x00
};
static unsigned char B2154[] =
{
	0x74,0x14,0x43,0x03,0x42,
	0x02,0x41,0x01,0x40,0x00
};
static unsigned char B2164[] =
{
	0x14,0x53,0x13,0x52,0x12,
	0x51,0x11,0x50,0xa0,0x80
};
static unsigned char B2174[] =
{
	0x74,0x34,0x73,0x33,0x72,
	0x32,0x71,0x31,0xe0,0x80
};
static unsigned char B2184[] =
{
	0x23,0x62,0x22,0x61,0x21,
	0x70,0x40,0x20,0x00
};
static unsigned char B2193[] =
{
	0x42,0x42,0x52,0x72,0x13,
	0x43,0xf3,0x80,0x00
};
static unsigned char B2202[] =
{
	0x00,0x00,0x00,0x80,0x85,
	0x05,0x05,0x05,0x05
};
static unsigned char B2211[] =
{
	0x0c,0x59,0x47,0x55,0x04,
	0x52,0x41,0x50,0x00
};
static unsigned char B2220[] =
{
	0x00,0x10,0x30,0x50,0xe0,
	0x50,0x30,0x10,0x00
};
static unsigned char B2229[] =
{
	0x00,0x00,0x00,0x00,0x80,
	0x00,0x00,0x00,0x00
};
static unsigned char B2238[] =
{
	0x04,0x04,0x04,0x04,0x04,0x04,
	0x73,0xe3,0x33,0x52,0x41,0x00
};
static unsigned char B2250[] =
{
	0x44,0x04,0x43,0x03,0x42,
	0x02,0x41,0x01,0x40,0x00
};
static unsigned char B2260[] =
{
	0x41,0x41,0x41,0x41,0x41,0x41,
	0x31,0xa1,0x01,0xe0,0x30,0x00
};
static unsigned char W2272[] =
{
	0x18,0xc0,0x16,0x80,0x14,0x40,
	0x12,0x00,0


   * fl : "30"
   * hum : "87"
   * pcpn : "0.0"
   * pres : "1005"
   * tmp : "26"
   * vis : "16"
   * wind_deg : "271"
   * wind_dir : "����"
   * wind_sc : "0"
   * wind_spd : "1"
   */

  String cloud;
  String condCode;
  String condTxt;
  String fl;
  String hum;
  String pcpn;
  String pres;
  String tmp;
  String vis;
  String windDeg;
  String windDir;
  String windSc;
  String windSpd;

  static NowBean fromMap(Map<String, dynamic> map) {
    NowBean nowBean = new NowBean();
    nowBean.cloud = map['cloud'];
    nowBean.condCode = map['cond_code'];
    nowBean.condTxt = map['cond_txt'];
    nowBean.fl = map['fl'];
    nowBean.hum = map['hum'];
    nowBean.pcpn = map['pcpn'];
    nowBean.pres = map['pres'];
    nowBean.tmp = map['tmp'];
    nowBean.vis = map['vis'];
    nowBean.windDeg = map['wind_deg'];
    nowBean.windDir = map['wind_dir'];
    nowBean.windSc = map['wind_sc'];
    nowBean.windSpd = map['wind_spd'];
    return nowBean;
  }

  static List<NowBean> fromMapList(dynamic mapList) {
    List<NowBean> list = List.filled(mapList.length, null);
    for (int i = 0; i < mapList.length; i++) {
      list[i] = fromMap(mapList[i]);
    }
    return list;
  }
}

class UpdateBean {

  /*
   * loc : "2019-07-24 16:57"
   * utc : "2019-07-24 13:57"
   */

  String loc;
  String utc;

  static UpdateBean fromMap(Map<String, dynamic> map) {
    UpdateBean updateBean = new UpdateBean();
    updateBean.loc = map['loc'];
    updateBean.utc = map['utc'];
    return updateBean;
  }

  static List<UpdateBean> fromMapList(dynamic mapList) {
    List<UpdateBean> list = List.filled(mapList.length, null);
    for (int i = 0; i < mapList.length; i++) {
      list[i] = fromMap(mapList[i]);
    }
    return list;
  }
}
class UpdateInfoBean {

  /*
   * appVersion : "1.0.0"
   * appName : "无"
   * updateInfo : "无"
   * downloadUrl : "无"
   * appId : "001"
   */

  String appVersion;
  String appName;
  String updateInfo;
  String downloadUrl;
  String appId;

  static UpdateInfoBean fromMap(Map<String, dynamic> map) {
    UpdateInfoBean updateInfoBean = new UpdateInfoBean();
    updateInfoBean.appVersion = map['appVersion'];
    updateInfoBean.appName = map['appName'];
    updateInfoBean.updateInfo = map['updateInfo'];
    updateInfoBean.downloadUrl = map['downloadUrl'];
    updateInfoBean.appId = map['appId'];
    return updateInfoBean;
  }

  static List<UpdateInfoBean> fromMapList(dynamic mapList) {
    List<UpdateInfoBean> list = List.filled(mapList.length, null);
    for (int i = 0; i < mapList.length; i++) {
      list[i] = fromMap(mapList[i]);
    }
    return list;
  }

  static  bool needUpdate(String oldVersion, String newVersio


ad(0, 14).addConfigs(m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express))
						.offset(0.75, -0.0625, -0.1875D)
						.setupStandardFire().recoil(LAMBDA_RECOIL_HENRY))
				.setupStandardConfiguration()
				.anim(LAMBDA_HENRY_ANIMS).orchestra(Orchestras.ORCHESTRA_HENRY)
				).setUnlocalizedName("gun_henry_lincoln");

		ModItems.gun_heavy_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
				.dura(600).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).smoke(Lego.LAMBDA_STANDARD_SMOKE)
				.rec(new Receiver(0)
						.dmg(15F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F)
						.mag(new MagazineFullReload(0, 6).addConfigs(m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express))
						.offset(0.75, -0.0625, -0.3125D)
						.setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP))
				.setupStandardConfiguration()
				.anim(LAMBDA_NOPIP_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP)
				).setNameMutator(LAMBDA_NAME_NOPIP)
				.setUnlocalizedName("gun_heavy_revolver");
		ModItems.gun_heavy_revolver_lilmac = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig()
				.dura(31_000).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).scopeTexture(scope_lilmac).smoke(Lego.LAMBDA_STANDARD_SMOKE)
				.rec(new Receiver(0)
						.dmg(30F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F)
						.mag(new MagazineFullReload(0, 6).addConfigs(m44_equestrian_pip, m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express))
						.offset(0.75, -0.0625, -0.3125D)
						.setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP))
				.setupStandardConfiguration()
				.anim(LAMBDA_LILMAC_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP)
				).setUnlocalizedName("gun_heavy_revolver_lilmac");
		ModItems.gun_heavy_revolver_protege = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig()
				.dura(31_000).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).smoke(Lego.LAMBDA_STANDARD_SMOKE)
				.rec(new Receiver(0)
						.dmg(30F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 0.8F)
						.mag(new MagazineFullReload(0, 6).addConfigs(m44_equestrian_mn7, m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express))
						.offset(0.75, -0.0625, -0.3125D)
						.setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP))
				.setupStandardConfiguration()
				.anim(LAMBDA_L


dRefSysRegistry implements CoordRefSysResolver {
  const _BasicCoordRefSysRegistry();

  @override
  String normalizeId(String id) {
    if (id.startsWith(_epsgPrefix) && id.length >= _epsgPrefix.length + 1) {
      final code = int.tryParse(id.substring(_epsgPrefix.length));
      if (code != null) {
        return '$_opengisEPSG0Prefix$code';
      }
    }

    return id;
  }

  @override
  bool isGeographic(String id, {bool? wgs84, AxisOrder? order}) {
    final bool idOk;
    switch (id) {
      case 'http://www.opengis.net/def/crs/OGC/1.3/CRS84':
      case 'http://www.opengis.net/def/crs/OGC/1.3/CRS84h':
      case 'http://www.opengis.net/def/crs/EPSG/0/4326':
        // these are all WGS84
        idOk = wgs84 == null || wgs84;
        break;
      case 'http://www.opengis.net/def/crs/EPSG/0/4258':
        // this is not WGS84 but ETRS89
        idOk = wgs84 == null || !wgs84;
        break;
      default:
        idOk = false;
        break;
    }
    if (order != null) {
      return idOk && order == axisOrder(id);
    } else {
      return idOk;
    }
  }

  @override
  AxisOrder? axisOrder(String id) {
    switch (id) {
      case 'http://www.opengis.net/def/crs/OGC/1.3/CRS84':
      case 'http://www.opengis.net/def/crs/OGC/1.3/CRS84h':
        return AxisOrder.xy;
      case 'http://www.opengis.net/def/crs/EPSG/0/4326':
        return AxisOrder.yx;
      case 'http://www.opengis.net/def/crs/EPSG/0/4258':
        return AxisOrder.yx;
      case 'http://www.opengis.net/def/crs/EPSG/0/3857':
        return AxisOrder.xy;
      case 'http://www.opengis.net/def/crs/EPSG/0/3395':
        return AxisOrder.xy;
      case 'http://www.opengis.net/def/crs/EPSG/0/4978':
        return AxisOrder.xy;
    }
    return null; // do not know
  }

  @override
  bool swapXY(String id, {GeoRepresentation? logic}) {
    switch (logic ?? GeoRepresentation.crsAuthority) {
      case GeoRepresentation.crsAuthority:
        // external geospatial data (like GeoJSON) in axis order specified by
        // authority => swap when external data in lat-lon or northing-easting
        // order
        return axisOrder(id) == AxisOrder.yx;
      case GeoRepresentation.geoJsonStrict:
        // external GeoJSON data always in lon-lat or easting-northing order
        // => no need to swap
        return false;
    }
  }

  @override
  int? epsgCode(String id) {
    if (id.startsWith(_epsgPrefix) && id.length >= _epsgPrefix.length + 1) {
      final code = int.tryParse(id.substring(_epsgPrefix.length));
      if (code != null) {
        return code;
      }
    }
    if (id.startsWith(_opengisEPSG0Prefix) &&
        id.length >= _opengisEPSG0Prefix.length + 1) {
      final code = int.tryParse(id.substring(_opengisEPSG0Prefix.length));
      if (code != null) {
        return code;
      }
    }

    return null; // do not know
  }

  @override
  String? epsg


	"github.com/teutonet/cluster-api-provider-hosted-control-plane/pkg/reconcilers"
	"github.com/teutonet/cluster-api-provider-hosted-control-plane/pkg/reconcilers/alias"
	"github.com/teutonet/cluster-api-provider-hosted-control-plane/pkg/util/networkpolicy"
	"github.com/teutonet/cluster-api-provider-hosted-control-plane/pkg/util/tracing"
	"go.opentelemetry.io/otel/trace"
	corev1 "k8s.io/api/core/v1"
	rbacv1 "k8s.io/api/rbac/v1"
	apierrors "k8s.io/apimachinery/pkg/api/errors"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	corev1ac "k8s.io/client-go/applyconfigurations/core/v1"
	rbacv1ac "k8s.io/client-go/applyconfigurations/rbac/v1"
	"k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
	capiv2 "sigs.k8s.io/cluster-api/api/core/v1beta2"
)

type KonnectivityReconciler interface {
	ReconcileKonnectivity(
		ctx context.Context,
		hostedControlPlane *v1alpha1.HostedControlPlane,
		cluster *capiv2.Cluster,
	) (string, error)
}

func NewKonnectivityReconciler(
	kubernetesClient alias.WorkloadClusterClient,
	ciliumClient ciliumclient.Interface,
	konnectivityNamespace string,
	konnectivityServiceAccount string,
	konnectivityServerAudience string,
	konnectivityServicePort int32,
) KonnectivityReconciler {
	return &konnectivityReconciler{
		WorkloadResourceReconciler: reconcilers.WorkloadResourceReconciler{
			KubernetesClient: kubernetesClient,
			CiliumClient:     ciliumClient,
			Tracer:           tracing.GetTracer("konnectivity"),
		},
		konnectivityServerAudience:          konnectivityServerAudience,
		konnectivityServicePort:             konnectivityServicePort,
		konnectivityNamespace:               konnectivityNamespace,
		konnectivityServiceAccountName:      konnectivityServiceAccount,
		konnectivityServiceAccountTokenName: "konnectivity-agent-token",
	}
}

type konnectivityReconciler struct {
	reconcilers.WorkloadResourceReconciler
	konnectivityNamespace               string
	konnectivityServerAudience          string
	konnectivityServicePort             int32
	konnectivityServiceAccountName      string
	konnectivityServiceAccountTokenName string
}

var _ KonnectivityReconciler = &konnectivityReconciler{}

func (kr *konnectivityReconciler) ReconcileKonnectivity(
	ctx context.Context,
	hostedControlPlane *v1alpha1.HostedControlPlane,
	cluster *capiv2.Cluster,
) (string, error) {
	return tracing.WithSpan(ctx, kr.Tracer, "ReconcileKonnectivity",
		func(ctx context.Context, span trace.Span) (string, error) {
			phases := []struct {
				Name      string
				Reconcile func(context.Context) (string, error)
			}{
				{
					Name:      "RBAC",
					Reconcile: kr.reconcileKonnectivityRBAC,
				},
				{
					Name: "Deployment",
					Reconcile: func(ctx context.Context) (string, error) {
						return kr.reconcileKonnectivityDeployment(ctx, hostedControlPlane, cluster)
					},
				},
			}

			logger := logr.FromContextAsSlogLogger(ctx)
			for _, phase := range phases {
				notReadyReason, err := tracing.WithSpan(
					ctx,
					kr.Tr


ry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 36);
/******/ })
/************************************************************************/
/******/ ({

/***/ 36:
/***/ (function(module, exports) {

(function ($) {
  $.extend($.summernote.lang, {
    'ro-RO': {
      font: {
        bold: 'Îngroșat',
        italic: 'Înclinat',
        underline: 'Subliniat',
        clear: 'Înlătură formatare font',
        height: 'Înălțime rând',
        name: 'Familie de fonturi',
        strikethrough: 'Tăiat',
        subscript: 'Indice',
        superscript: 'Exponent',
        size: 'Dimensiune font'
      },
      image: {
        image: 'Imagine',
        insert: 'Inserează imagine',
        resizeFull: 'Redimensionează complet',
        resizeHalf: 'Redimensionează 1/2',
        resizeQuarter: 'Redimensionează 1/4',
        floatLeft: 'Aliniere la stânga',
        floatRight: 'Aliniere la dreapta',
        floatNone: 'Fară aliniere',
        shapeRounded: 'Formă: Rotund',
        shapeCircle: 'Formă: Cerc',
        shapeThumbnail: 'Formă: Pictogramă',
        shapeNone: 'Formă: Nici una',
        dragImageHere: 'Trage o imagine sau un text aici',
        dropImage: 'Eliberează imaginea sau textul',
        selectFromFiles: 'Alege din fişiere',
        maximumFileSize: 'Dimensiune maximă fișier',
        maximumFileSizeError: 'Dimensiune maximă fișier depășită.',
        url: 'URL imagine',
        remove: 'Șterge imagine',
        original: 'Original'
      },
      video: {
        video: 'Video',
        videoLink: 'Link video',
        insert: 'Inserează video',
        url: 'URL video?',
        providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion sau Youku)'
      },
      link: {
        link: 'Link',
        insert: 'Inserează link',
        unlink: 'Înlătură link',
        edit: 'Editează',
        textToDisplay: 'Text ce va fi afişat',
        url: 'La ce adresă URL trebuie să conducă acest link?',
        openInNewWindow: 'Deschidere în fereastră nouă'
      },
      table: {
        table: 'Tabel',
        addRowAbove: 'Adaugă rând deasupra',
        addRowBelow: 'Adaugă rând dedesubt',
        addColLeft: 'Adaugă coloană stânga',
        addColRight: 'Adaugă coloană dreapta',
        delRow: 'Șterge rând',
        delCol: 'Șterge coloană',
        delTable: 'Șterge tabel'
      },
      hr: {
        insert: 'Inserează o linie orizontală'
      },
      style: {
        style: 'Stil',
        p: 'p',
        blockquote: 'Citat',
        pre: 'Preformatat',
        h1: 'Titlu 1',
        h2: 'Titlu 2',
        h3: 'Titlu 3',
        h4: 'Titlu 4',
        h5: 'Titlu 5',
        h6: 'Titlu 6'
      },
      lists: {
        unordered: 'Listă neordonată',
        ordered: 'Listă ordonată'
      },
      options: {
        help: 'Ajutor',
        fullscreen: 'Măreşte',
        codeview: 'Sursă'
      },
      paragraph: {
        paragraph: 'Paragraf',


ntroduce-textlint/ "textlintで日本語の文章をチェックする | Web Scratch")

[azu/JavaScript-Plugin-Architecture](https://github.com/azu/JavaScript-Plugin-Architecture "azu/JavaScript-Plugin-Architecture")はこのツールなどを作ってチェックしながら書いているという話をしました。

今は[RedPen](http://redpen.cc/ "RedPen")とか自然言語処理をちゃんとやっているツールもありますが、発表で話していたように自然言語の正しさは人によるところがあります。

そういった細かいルールをすぐ書いて使える環境として[textlint](https://github.com/textlint/textlint "textlint")を作っているので、Node.jsに慣れている人(ESLintのルールを書いたことがある人ならなおさら)は扱いやすいと思います。

発表では話していませんでしたが、対応してるMarkdown、txt、HTMLは[Processor Plugin](https://github.com/textlint/textlint/blob/master/docs/plugin.md)として実装されているので、対応する拡張子自体も拡張が可能です。

Markdownのパースでは[mdast](https://github.com/wooorm/mdast "mdast")をベースとしたものを使ったりしています。

話した内容のGitBookの構成は[gitbook-starter-kit](https://github.com/azu/gitbook-starter-kit "gitbook-starter-kit")というリポジトリをcloneすればすぐに使えるようになっています。

- [今すぐ電子書籍(技術書)を書き始める方法と文章の自動チェック | Web Scratch](https://efcl.info/2015/09/28/easy-to-create-ebook/ "今すぐ電子書籍(技術書)を書き始める方法と文章の自動チェック | Web Scratch")

何かあれば[textlint](https://github.com/textlint/textlint "textlint")にIssueを立てるといいかと思います。

----

## "npm": ">=3"

スライド: [zkat/talks](https://github.com/zkat/talks "zkat/talks")

- npmの話
- CLIはJavaScriptのために動くチーム
	- CLIチームは3名
- npm日本語サポートの窓口
	-  @watilde @yosuke_furukawa
- npm
- ProgressBar
	- 要望は昔からあったけどnpm 3でやっと実装
- semver
	- バージョンを見た時に意味のあるものが入ったことがバージョン番号だけで分かる
- npm3でのmajorな変更
	- Flat tree
	- npm dedupeがインストールされるたびに行われる
	- モジュールがグローバルに入ってる事には依存できなくなる
	- フロントエンドの事を考えてdudupeされてる
	- peerDependencies
		- 実際に入ってるかどうかは関係ない
		- 設定されてることが警告されるだけ
		- npm install hellになってしまった
- npm shrinkwrap
	- どこで何回インストールされても必ず同じ結果になるのがshrinkwrapになる
- npm v3の内部的な変更
	- フェーズに分けた
	- パッケージのダウンロード -> 次のフェーズ
	- preversionのlifecycle hookでnpm testするといい感じ
- [Roadmap · npm/npm Wiki](https://github.com


 function
            main()

            # Verify client initialization
            mock_client_class.assert_called_once_with(
                mock_config_instance.aws_config.region, mock_config_instance.aws_config.profile
            )

            # Verify service initialization
            mock_import_service.assert_called_once_with(mock_client, mock_config_instance)
            mock_imported_service.assert_called_once_with(mock_client, mock_config_instance)

            # Verify tool initialization
            mock_create_job.assert_called_once()
            mock_get_job.assert_called_once()
            mock_list_jobs.assert_called_once()
            mock_get_model.assert_called_once()
            mock_delete_model.assert_called_once()
            mock_list_models.assert_called_once()

            # Verify prompts initialization
            mock_prompts.assert_called_once_with(mock_fastmcp)

    def test_module_execution(self):
        """Test the module execution when run as __main__."""
        import inspect
        from awslabs.aws_bedrock_custom_model_import_mcp_server import server

        source = inspect.getsource(server)
        assert "if __name__ == '__main__':" in source
        assert 'main()' in source


")
	}
	env := newEnviron(globalEnv)
	for _, p := range contract.Params {
		err = env.add(p.Name, p.Type, roleContractParam)
		if err != nil {
			return err
		}
	}
	err = env.add(contract.Value, valueType, roleContractValue)
	if err != nil {
		return err
	}
	for _, c := range contract.Clauses {
		err = env.add(c.Name, nilType, roleClause)
		if err != nil {
			return err
		}
	}

	err = prohibitValueParams(contract)
	if err != nil {
		return err
	}
	err = prohibitSigParams(contract)
	if err != nil {
		return err
	}
	err = requireAllParamsUsedInClauses(contract.Params, contract.Clauses)
	if err != nil {
		return err
	}

	var stk stack

	if len(contract.Clauses) > 1 {
		stk = stk.add("<clause selector>")
	}

	for i := len(contract.Params) - 1; i >= 0; i-- {
		p := contract.Params[i]
		stk = stk.add(p.Name)
	}

	if contract.Recursive {
		stk = stk.add(contract.Name)
	}

	b := &builder{}

	if len(contract.Clauses) == 1 {
		err = compileClause(b, stk, contract, env, contract.Clauses[0])
		if err != nil {
			return err
		}
	} else {
		if len(contract.Params) > 0 {
			// A clause selector is at the bottom of the stack. Roll it to the
			// top.
			n := len(contract.Params)
			if contract.Recursive {
				n++
			}
			stk = b.addRoll(stk, n) // stack: [<clause params> <contract params> [<maybe contract body>] <clause selector>]
		}

		var stk2 stack

		// clauses 2..N-1
		for i := len(contract.Clauses) - 1; i >= 2; i-- {
			stk = b.addDup(stk)                                                   // stack: [... <clause selector> <clause selector>]
			stk = b.addInt64(stk, int64(i))                                       // stack: [... <clause selector> <clause selector> <i>]
			stk = b.addNumEqual(stk, fmt.Sprintf("(<clause selector> == %d)", i)) // stack: [... <clause selector> <i == clause selector>]
			stk = b.addJumpIf(stk, contract.Clauses[i].Name)                      // stack: [... <clause selector>]
			stk2 = stk                                                            // stack starts here for clauses 2 through N-1
		}

		// clause 1
		stk = b.addJumpIf(stk, contract.Clauses[1].Name) // consumes the clause selector

		// no jump needed for clause 0

		for i, clause := range contract.Clauses {
			if i > 1 {
				// Clauses 0 and 1 have no clause selector on top of the
				// stack. Clauses 2 and later do.
				stk = stk2
			}

			b.addJumpTarget(stk, clause.Name)

			if i > 1 {
				stk = b.addDrop(stk)
			}

			err = compileClause(b, stk, contract, env, clause)
			if err != nil {
				return errors.Wrapf(err, "compiling clause \"%s\"", clause.Name)
			}
			b.forgetPendingVerify()
			if i < len(contract.Clauses)-1 {
				b.addJump(stk, "_end")
			}
		}
		b.addJumpTarget(stk, "_end")
	}

	opcodes := optimize(b.opcodes())
	prog, err := vm.Assemble(opcodes)
	if err != nil {
		return err
	}

	contrac


ol bUseCosmetics = false;

	// If the custom character system is enabled, we should load invisible skeleton players that will be eventually clothed.
	if ( bUseCosmetics )
	{
		//FIXME: custom characters have no audio persona; that is they don't speak yet (who would they sound like?)

		AddModel( g_customizationModelT );
		m_NumTModels = 1;
		AddModel( g_customizationModelCT );
		m_NumCTModels = 1;

		DevMsg( "Using script-defined character customization definitions\n" );
	}
	else
	{

		// Add the terrorist models.
		// NOTE: Terrorists must be loaded first since it is assumed they are first in the list of models.
		const CUtlStringList *pTModelNames = g_pGameTypes->GetTModelsForMap( m_mapName );
		if ( pTModelNames )
		{
			FOR_EACH_VEC( *pTModelNames, iModel )
			{
				const char *modelName = (*pTModelNames)[iModel];
				if ( modelName )
				{
					AddModel( modelName );
				}
			}

			m_NumTModels = m_NumModels;
		}

		// Add the default terrorist model, if no models were loaded.
		if ( m_NumTModels == 0 )
		{
			Warning( "PlayerModelInfo: missing terrorist models for map %s. Adding the default model %s.\n", m_mapName, g_defaultTModel );
			AddModel( g_defaultTModel );
			m_NumTModels = 1;
		}

		// Add the counter-terrorist models.
		const CUtlStringList *pCTModelNames = g_pGameTypes->GetCTModelsForMap( m_mapName );
		if ( pCTModelNames )
		{
			FOR_EACH_VEC( *pCTModelNames, iModel )
			{
				const char *modelName = (*pCTModelNames)[iModel];
				if ( modelName )
				{
					AddModel( modelName );
				}
			}

			m_NumCTModels = m_NumModels - m_NumTModels;
		}

		// Add the default counter-terrorist model, if no models were loaded.
		if ( m_NumCTModels == 0 )
		{
			Warning( "PlayerModelInfo: missing counter-terrorist models for map %s. Adding the default model %s.\n", m_mapName, g_defaultCTModel );
			AddModel( g_defaultCTModel );
			m_NumCTModels = 1;
		}

	}

}

void PlayerModelInfo::AddModel( const char *modelName )
{
	Assert( modelName );
	if ( !modelName ||
		 modelName[0] == '\0' )
	{
		return;
	}

	Assert( m_NumModels >= 0 && m_NumModels < CS_MAX_PLAYER_MODELS );
	if ( m_NumModels >= 0 && m_NumModels < CS_MAX_PLAYER_MODELS )
	{
		V_strcpy_safe( m_ClassNames[m_NumModels], modelName );

		if ( V_stristr( modelName, "scaffold" ) )
		{
			V_strcpy_safe( m_ClassModelPaths[m_NumModels], modelName );
		}
		else
		{
			char szCleanedPath[MAX_MODEL_STRING_SIZE];
			V_StrSubst( m_ClassNames[m_NumModels], "models/player", "", szCleanedPath, sizeof(szCleanedPath) );
			char szRedirectedPath[MAX_MODEL_STRING_SIZE];
			V_sprintf_safe( szRedirectedPath, "models/player/custom_player/legacy/%s", szCleanedPath );
			if ( !V_stristr( szRedirectedPath, ".mdl" ) )
				V_strcat_safe


�接，标记未经验证的Hibernate HQL查询。

**三、双标准能力矩阵：覆盖全语言、全场景的安全防护**

![图片](https://mmecoa.qpic.cn/mmecoa_png/KOWJ2ib68IGiaY2WEoibkCYTDVWVGicBB1mz5U2zHrJmLGrc9ib6dIH5OkRKtX9eh7hr0zWpQ246FAmugmYDsUBA30g/640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=10005&wx_lazy=1 "")

![图片](https://mmecoa.qpic.cn/mmecoa_png/KOWJ2ib68IGiaY2WEoibkCYTDVWVGicBB1mzw6SXSp9AGEJO02JIownCMG9ZhQ5QZKTAWQibFj8N8MvNgulArgu4Jxw/640?wx_fmt=png&tp=wxpic&wxfrom=10005&wx_lazy=1 "")

灵脉AI支持基于合规标准维度展示任务缺陷

![图片](https://mmecoa.qpic.cn/mmecoa_png/KOWJ2ib68IGiaY2WEoibkCYTDVWVGicBB1mzxUURtr1CnseRJTBluJiaNG18OXHUF8htJbolvbtVMlRd0OfEazGYZqg/640?wx_fmt=png&tp=wxpic&wxfrom=10005&wx_lazy=1 "")

灵脉AI支持对缺陷进行过程间污点跟踪分析

**客户案例实践**

**项目背景**

某金融机构采用敏捷+DevOps开发模式，发版周期缩短至每周1次，但面临以下痛点：

**安全漏洞修复滞后：**
传统人工代码审计周期长达2-3周，漏洞修复往往延迟至测试阶段甚至上线后。

**跨部门协作低效：**
安全团队与开发团队对部分漏洞定义理解不一致，需反复沟通确认。

**合规风险凸显：**
金融行业监管要求必须符合 GB/T 34944-2017《Java 语言源代码漏洞测试规范》，但现有工具无法覆盖标准要求的 44 类漏洞。

**开发人员安全能力不足：**
80%的开发人员缺乏系统安全培训，难以识别隐蔽漏洞。

**解决方案**

通过将灵脉AI集成到CI/CD流水线中，可以在每


5 3.947-9.95 9'/%3E%3Cpath d='M17 8h4.4a.6.6 0 0 0 .6-.6V3M2.881 16c1.544 3.532 5.068 6 9.168 6c5.186 0 9.45-3.947 9.951-9'/%3E%3Cpath d='M7.05 16h-4.4a.6.6 0 0 0-.6.6V21'/%3E%3C/g%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em}.i-ion\:md-return-left{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 512 512' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath d='M432.8 136v96H122.3l84.4-86.2-33.2-33.8L32 256l141.5 144 33.2-33.8-84.4-86.2H480V136h-47.2z' fill='currentColor'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em}.i-ri\:close-fill,.i-ri\:close-line{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m12 10.587l4.95-4.95l1.414 1.414l-4.95 4.95l4.95 4.95l-1.415 1.414l-4.95-4.95l-4.949 4.95l-1.414-1.415l4.95-4.95l-4.95-4.95L7.05 5.638z'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit;display:inline-block;vertical-align:middle;width:1em;height:1em}.i-ri\:copyright-line{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M16.288 9.428A4.999 4.999 0 0 0 7 12a4.999 4.999 0 0 0 9.288 2.572l-1.715-1.028A3 3 0 1 1 12 9c1.093 0 2.05.584 2.573 1.457zM22 12c0-5.52-4.48-10-10-10S2 6.48 2 12s4.48 10 10 10s10-4.48 10-10M4 12c0-4.42 3.58-8 8-8s8 3.58 8 8s-3.58 8-8 8s-8-3.58-8-8'/%3E%3C/svg%3E");-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100


[0]) + 1);

        	for(int i =0; i<jw.Count; i++) {
        		String tmp = jw[i];

				if(tmp.Equals("{c}")) {
        			if('f' < last[i]) {
        				last[i] = 'a';
        				if(i != jw.Count - 1) last[i+1] = (char)((int)(last[i+1]) + 1);
        			}
				}
				if(tmp.Equals("{a}")) {
        			if('9' < last[i] && 'a' > last[i]) {
        				last[i] = 'a';
        			} else if('f' < last[i]) {
        				last[i] = '0';
    					if(i != jw.Count - 1)  last[i+1] = (char)((int)(last[i+1]) + 1);
        			}
				}

				if(tmp.Equals("{i}")) {
					if('9' < last[i]) {
        				last[i] = '0';
        				if(i != jw.Count - 1)  last[i+1] = (char)((int)(last[i+1]) + 1);
        			}
				}
			}

        	return increment(code, target, jw, l


tr.address { font-family: sans-serif }
body { background: #ffffff; color: black; }
</style>

	  	Home · All Classes · Modules

Phonon.MediaObject Class Reference
[phonon module]

The MediaObject class provides an interface for media playback.
More...

Inherits QObject and MediaNode.

Methods

__init__ (self, QObject parent = None)

clear (self)

clearQueue (self)

MediaSource currentSource (self)

int currentTime (self)

enqueue (self, MediaSource source)

enqueue (self, list-of-Phonon.MediaSource sources)

enqueue (self, list-of-QUrl urls)

QString errorString (self)

ErrorType errorType (self)

bool hasVideo (self)

bool isSeekable (self)

QStringList metaData (self, QString key)

QStringList <a href="phonon


  public boolean isJsapiTicketExpired() {
    Long expire = redisOps.getExpire(this.jsapiTicketKey);
    return expire == null || expire < 2;
  }

  @Override
  public void expireJsapiTicket() {
    redisOps.expire(this.jsapiTicketKey, 0, TimeUnit.SECONDS);
  }

  @Override
  public void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) {
    redisOps.setValue(this.jsapiTicketKey, jsapiTicket, expiresInSeconds, TimeUnit.SECONDS);
  }

  @Override
  public void expireAgentJsapiTicket() {
    redisOps.expire(this.agentJsapiTicketKey, 0, TimeUnit.SECONDS);
  }

  @Override
  public void updateAgentJsapiTicket(String agentJsapiTicket, int expiresInSeconds) {
    redisOps.setValue(this.agentJsapiTicketKey, agentJsapiTicket, expiresInSeconds, TimeUnit.SECONDS);
  }

  @Override
  public String getAgentJsapiTicket() {
    return redisOps.getValue(this.agentJsapiTicketKey);
  }

  @Override
  public boolean isAgentJsapiTicketExpired() {
    Long expire = redisOps.getExpire(this.agentJsapiTicketKey);
    return expire == null || expire < 2;
  }

  @Override
  public String toString() {
    return "AbstractWxCpInRedisConfigImpl{" +
      "corpId='" + getCorpId() + '\'' +
      ", agentId=" + getAgentId() +
      ", keyPrefix='" + keyPrefix + '\'' +
      ", accessTokenKey='" + accessTokenKey + '\'' +
      ", jsapiTicketKey='" + jsapiTicketKey + '\'' +
      ", agentJsapiTicketKey='" + agentJsapiTicketKey + '\'' +
      ", lockKey='" + lockKey + '\'' +
      '}';
  }
}
package me.chanjar.weixin.cp.api.impl;

import com.google.gson.JsonObject;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpAgentWorkBenchService;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.bean.WxCpAgentWorkBench;

import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.WorkBench.*;

/**
 * 工作台自定义展示实现
 *
 * @author songshiyu
 * created at 11:24 2020/9/28
 */
@RequiredArgsConstructor
public class WxCpAgentWorkBenchServiceImpl implements WxCpAgentWorkBenchService {
  private final WxCpService mainService;

  @Override
  public void setWorkBenchTemplate(WxCpAgentWorkBench wxCpAgentWorkBench) throws WxErrorException {
    final String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(WORKBENCH_TEMPLATE_SET));
    this.mainService.post(url, wxCpAgentWorkBench.toTemplateString());
  }

  @Override
  public String getWorkBenchTemplate(Long agentId) throws WxErrorException {
    final String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(WORKBENCH_TEMPLATE_GET));
    JsonObject jsonObject = new JsonObject();
    jsonObject.addProperty("agentid", agentId);
    return this.mainService.post(url, jsonObject.toString());
  }

  @Override
  public void setWorkBenchData(WxCpAgentWorkBench wxCpAgentWorkBench) throws Wx


         return like(column, null);
        return accept(column, TermType.like, StringUtils.concat("%", value, "%"));
    }

    /**
     * 追加not like条件: column not like ?
     *
     * @param column 列名
     * @param value  条件值
     * @return this
     */
    default T notLike(String column, Object value) {
        return accept(column, TermType.nlike, value);
    }

    /**
     * 追加大于条件: column > ?
     *
     * @param column 列名
     * @param value  条件值
     * @return this
     */
    default T gt(String column, Object value) {
        return accept(column, TermType.gt, value);
    }

    /**
     * 追加小于条件: column < ?
     *
     * @param column 列名
     * @param value  条件值
     * @return this
     */
    default T lt(String column, Object value) {
        return accept(column, TermType.lt, value);
    }

    /**
     * 追加大于等于条件: column >= ?
     *
     * @param column 列名
     * @param value  条件值
     * @return this
     */
    default T gte(String column, Object value) {
        return accept(column, TermType.gte, value);
    }

    /**
     * 追加小于等于条件: column <= ?
     *
     * @param column 列名
     * @param value  条件值
     * @return this
     */
    default T lte(String column, Object value) {
        return accept(column, TermType.lte, value);
    }

    /**
     * 追加IN条件: column in (?)
     *
     * @param column 列名
     * @param value  条件值
     * @return 当前条件构造器
     */
    default T in(String column, Object value) {
        return accept(column, TermType.in, value);
    }

    /**
     * 追加IN条件: column in (?,?,?)
     *
     * @param column 列名
     * @param values 条件值数组
     * @return 当前条件构造器
     */
    default T in(String column, Object... values) {
        return accept(column, TermType.in, values);
    }

    /**
     * 追加IN条件: column in (collection)
     *
     * @param column 列名
     * @param values 条件值集合
     * @return 当前条件构造器
     */
    default T in(String column, Collection values) {
        return accept(column, TermType.in, values);
    }

    /**
     * 追加NOT IN条件: column not in (?)
     *
     * @param column 列名
     * @param value  条件值
     * @return 当前条件构造器
     */
    default T notIn(String column, Object value) {
        return accept(column, TermType.nin, value);
    }

    /**
     * 追加NOT IN条件: column not in (?,?,?)
     *
     * @param column 列名
     * @param value  条件值数组
     * @return 当前条件构造器
     */
    default T notIn(String column, Object... value) {
        return accept(column, TermType.nin, value);
    }

    /**
     * 追加NOT IN条件: column not in (collection)
     *
     * @param column 列名
     * @param values 条件值集合
     * @return 当前条件构造器
     */
    default T notIn(String column, Collection values) {
        return accept(column, TermType.nin, values);


 != 0) && (qualName != 0) );	// Enforced by wrapper.
	XMP_Assert ( (qualValue != 0) && (options != 0) );	// Enforced by wrapper.

	XMP_VarString qualPath;
	XMPUtils::ComposeQualifierPath ( schemaNS, propName, qualNS, qualName, &qualPath );
	return GetProperty ( schemaNS, qualPath.c_str(), qualValue, valueSize, options );

}	// GetQualifier

// -------------------------------------------------------------------------------------------------
// SetProperty
// -----------

// *** Should handle array items specially, calling SetArrayItem.

void
XMPMeta::SetProperty ( XMP_StringPtr  schemaNS,
					   XMP_StringPtr  propName,
					   XMP_StringPtr  propValue,
					   XMP_OptionBits options )
{
	XMP_Assert ( (schemaNS != 0) && (propName != 0) );	// Enforced by wrapper.

	options = VerifySetOptions ( options, propValue );

	XMP_ExpandedXPath expPath;
	ExpandXPath ( schemaNS, propName, &expPath );

	XMP_Node * propNode = FindNode ( &tree, expPath, kXMP_CreateNodes, options );
	if ( propNode == 0 ) XMP_Throw ( "Specified property does not exist", kXMPErr_BadXPath );

	SetNode ( propNode, propValue, options );

}	// SetProperty

// -------------------------------------------------------------------------------------------------
// SetArrayItem
// ------------

void
XMPMeta::SetArrayItem ( XMP_StringPtr  schemaNS,
						XMP_StringPtr  arrayName,
						XMP_Index	   itemIndex,
						XMP_StringPtr  itemValue,
						XMP_OptionBits options )
{
	XMP_Assert ( (schemaNS != 0) && (arrayName != 0) );	// Enforced by wrapper.

	XMP_ExpandedXPath arrayPath;
	ExpandXPath ( schemaNS, arrayName, &arrayPath );
	XMP_Node * arrayNode = FindNode ( &tree, arrayPath, kXMP_ExistingOnly );	// Just lookup, don't try to create.
	if ( arrayNode == 0 ) XMP_Throw ( "Specified array does not exist", kXMPErr_BadXPath );

	DoSetArrayItem ( arrayNode, itemIndex, itemValue, options );

}	// SetArrayItem

// -------------------------------------------------------------------------------------------------
// AppendArrayItem
// ---------------

void
XMPMeta::AppendArrayItem ( XMP_StringPtr  schemaNS,
						   XMP_StringPtr  arrayName,
						   XMP_OptionBits arrayOptions,
						   XMP_StringPtr  itemValue,
						   XMP_OptionBits options )
{
	XMP_Assert ( (schemaNS != 0) && (arrayName != 0) );	// Enforced by wrapper.

	arrayOptions = VerifySetOptions ( arrayOptions, 0 );
	if ( (arrayOptions & ~kXMP_PropArrayFormMask) != 0 ) {
		XMP_Throw ( "Only array form flags allowed for arrayOptions", kXMPErr_BadOptions );
	}

	// Locate or create the array. If it already exists, make sure the array form from the options
	// parameter is compatible with the current state.

	XMP_ExpandedXPath arrayPath;
	ExpandXPath ( schemaNS, arrayName, &arrayPath );
	XMP_Node * arrayNode = FindNode ( &tree, arrayPath, kXMP_ExistingOnly );	// Just lookup, don't try to create.

	if ( arrayNode != 0 ) {
		// The array exists, make sure the form is compatible. Zero arrayForm means take what exists.
		if ( ! (arrayNode->options & kXMP_PropValueIsArray) ) {
			XMP_Throw ( "The named property is not an array", kXMPErr_BadXPath );
		}
		#if 0
			// *** Disable for now. Need to do some general rethinking of semantic checks.
			if ( (arrayOptions != 0) && (arrayOptions != (arrayNode->options &


width:100%;">

The Things Network is powered by The Things Stack

Console   |   Account   |   Documentation

Example of File I/O

The sample program below will open a new file for writing, write text to it from a memory buffer, then close it.  The file will be created in the
directory in which RARS was run.

# Sample program that writes to a new file.
#   by Kenneth Vollmar and Pete Sanderson

        .data
fout:   .asciz "testout.txt"      # filename for output
buffer: .asciz "The quick brown fox jumps over the lazy dog."
        .text
  ###############################################################
  # Open (for writing) a file that does not exist
  li   a7, 1024     # system call for open file
  la   a0, fout     # output file name
  li   a1, 1        # Open for writing


/LICENSE-2.0.
 */

import { AnchorHTMLAttributes, ButtonHTMLAttributes, HTMLAttributes, ReactNode } from 'react';

export const PLACEMENT = ['end', 'start'] as const;

export const PRODUCT = [
  'chat',
  'connect',
  'explore',
  'guide',
  'message',
  'support',
  'talk'
] as const;

export type Product = (typeof PRODUCT)[number];

export interface IChromeProps extends HTMLAttributes<HTMLDivElement> {
  /** Applies a custom hue to the chrome navigation */
  hue?: string;
  /** Prevents fixed positioning from being applied to the `<html>` element */
  isFluid?: boolean;
}

export interface ISkipNavProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
  /** Sets the ID of the element to navigate to */
  targetId: string;
  /** Sets the `z-index` of the element */
  zIndex?: number;
}

export interface IBodyProps extends HTMLAttributes<HTMLDivElement> {
  /** Adjusts the body content height to allow space for a footer component */
  hasFooter?: boolean;
}

export interface IHeaderProps extends HTMLAttributes<HTMLElement> {
  /** Displays logo for standlone usage  */
  isStandalone?: boolean;
}

export interface IHeaderItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {
  /** Maximizes the width of a flex item in the header */
  maxX?: boolean;
  /** Maximizes the height of the item (i.e. contains a search input) */
  maxY?: boolean;
  /** Rounds the border radius of the item */
  isRound?: boolean;
  /**
   * Applies a
   * [brand color](/design/color#brand-colors)
   * to the product logo
   */
  product?: Product;
  /** Applies header logo styles to the item */
  hasLogo?: boolean;
}

export interface IHeaderItemTextProps extends HTMLAttributes<HTMLElement> {
  /** Hides item text. Text remains accessible to screen readers. */
  isClipped?: boolean;
}

export interface IHeaderItemWrapperProps extends HTMLAttributes<HTMLDivElement> {
  /** Maximizes the width of a flex item in the header */
  maxX?: boolean;
  /** Maximizes the height of the item (i.e. contains a search input) */
  maxY?: boolean;
  /** Rounds the border radius of the item */
  isRound?: boolean;
}

export interface INavProps extends HTMLAttributes<HTMLElement> {
  /** Expands the nav area to display the item text */
  isExpanded?: boolean;
}

export interface INavItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {
  /** Applies a product-specific color palette */
  product?: Product;
  /** Indicates that the item is current in the nav */
  isCurrent?: boolean;
  /** Indicates that the item contains a product logo */
  hasLogo?: boolean;
  /** Indicates that the item contains the company brandmark */
  hasBrandmark?: boolean;
}

export interface INavItemTextProps extends HTMLAttributes<HTMLSpanElement> {
  /** Wraps overflow item text instead of truncating long strings with an ellipsis */
  isWrapped?: boolean;
}

export interface ISubNavItemProps extends ButtonHTMLAttributes<HTMLButtonElement> {
  /** Indicates that the item is current in the subnav */
  isCurrent?: boolean;
}

export interface ISubNavItemTextProps extends HTMLAttributes<HTMLSpanElement> {
  /**
   * Wraps overflow item text instead of truncating long strings with an ellipsis.
   * Use when `max-width` styling is applied to the subnav container.
   */
  isWrapped?: boolean;
}

export interface ICollapsibleSubNavItemPro


6 => arctan(x/y)
         is insignificant compared to piby2 */
      if (yneg) return valf_with_flags((float)-piby2, AMD_F_INEXACT);
      else return valf_with_flags((float)piby2, AMD_F_INEXACT);
    }
  else if (diffexp < -13 && (!xneg))
    { /* x positive and dominant over y by a factor of 2^13.
         In this case atan(y/x) is y/x to machine accuracy. */

      if (diffexp < -150) /* Result underflows */
        {
          if (yneg)
            return valf_with_flags(-0.0F, AMD_F_INEXACT | AMD_F_UNDERFLOW);
          else
            return valf_with_flags(0.0F, AMD_F_INEXACT | AMD_F_UNDERFLOW);
        }
      else
        {
          if (diffexp < -126)
            {
              /* Result will likely be denormalized */
              y = scaleDouble_1(y, 100);
              y /= x;
              /* Now y is 2^100 times the true result. Scale it back down. */
              GET_BITS_DP64(y, uy);
	      scaleDownDouble(uy, 100, &uy);
              PUT_BITS_DP64(uy, y);
	      if ((uy & EXPBITS_DP64) == 0)
		return valf_with_flags((float)y, AMD_F_INEXACT | AMD_F_UNDERFLOW);
	      else
		return (float)y;
             }
          else
            return (float)(y / x);
        }
    }
  else if (diffexp < -26 && xneg)
    { /* abs(x)/abs(y) > 2^56 and x < 0 => arctan(y/x)
         is insignificant compared to pi */
    if (yneg) return valf_with_flags((float)-pi, AMD_F_INEXACT);
    else return valf_with_flags((float)pi, AMD_F_INEXACT);
    }
  else if (yinf && xinf)
    { /* If abs(x) and abs(y) are both infinity
         return +-pi/4 or +- 3pi/4 according to
         signs.  */
    if (xneg)
      {
      if (yneg) return valf_with_flags((float)-three_piby4, AMD_F_INEXACT);
      else return valf_with_flags((float)three_piby4, AMD_F_INEXACT);
      }
    else
      {
      if (yneg) return valf_with_flags((float)-piby4, AMD_F_INEXACT);
      else return valf_with_flags((float)piby4, AMD_F_INEXACT);
      }
    }

  /* General case: take absolute values of arguments */

  u = x; v = y;
  if (xneg) u = -x;
  if (yneg) v = -y;

  /* Swap u and v if necessary to obtain 0 < v < u. Compute v/u. */

  swap_vu = (u < v);
  if (swap_vu) { uu = u; u = v; v = uu; }
  vbyu = v/u;

  if (vbyu > 0.0625)
    { /* General values of v/u. Use a look-up
         table and series expansion. */

      index = (int)(256*vbyu + 0.5);
      r = (256*v-index*u)/(256*u+index*v);

      /* Polynomial approximation to atan(vbyu) */

      s = r*r;
      q = atan_jby256[index-16] + r - r*s*0.33333333333224095522;
    }
  else if (vbyu < 1.e-4)
    { /* v/u is small enough that atan(v/u) = v/u */
      q = vbyu;
    }
  else /* vbyu <= 0.0625 */
    {
      /* Small values of v/u. Use a series expansion */

      s  = vbyu*vbyu;
      q = vbyu -
	vbyu*s*(0.33333333333333170500 -
		s*(0.19999999999393223405 -
		   s*0.14285713561807169030));
    }

  /* Tidy-up according to which quadrant the arguments lie in */

  if (swap_vu) {q = piby2 - q;}
  if (xneg) {q = pi - q;}
  if (yneg) q = - q;
  return (float)q;
}


 = RCC_CFGR_HPRE_DIV1 | RCC_CFGR_PPRE1_DIV1 | RCC_CFGR_PPRE2_DIV1
                | RCC_CFGR_SW_PLL;
    while ((RCC->CFGR & RCC_CFGR_SWS_Msk) != RCC_CFGR_SWS_PLL)
        ;
}

/****************************************************************
 * Bootloader
 ****************************************************************/

// Handle USB reboot requests
void
bootloader_request(void)
{
    dfu_reboot();
}

/****************************************************************
 * Startup
 ****************************************************************/

// Main entry point - called from armcm_boot.c:ResetHandler()
void
armcm_main(void)
{
    dfu_reboot_check();

    // Run SystemInit() and then restore VTOR
    SystemInit();
    SCB->VTOR = (uint32_t)VectorTable;

    clock_setup();

    sched_main();
}


activate_bootstrap(bootstrap_info_t *bootstrap);
extern void deallocate_bootstrap(bootstrap_info_t *bootstrap);
extern boolean_t active_bootstrap(bootstrap_info_t *bootstrap);

extern void *ckmalloc(unsigned nbytes);

extern bootstrap_info_t bootstraps;		/* head of list of bootstrap ports */
extern server_t servers;		/* head of list of all servers */
extern service_t services;		/* head of list of all services */
extern unsigned nservices;		/* number of services in list */

#define	FIRST(q)		((q).next)
#define	NEXT(qe)		((qe)->next)
#define	PREV(qe)		((qe)->prev)
#define	IS_END(qe, q)		((qe) == &(q))


从UID名称创建对象, 失败返回nil.
func NewModalWindowByUIDName(name string) *ModalWindow {
	handle := xc.XC_GetObjectByUIDName(name)
	if handle > 0 {
		p := &ModalWindow{}
		p.SetHandle(handle)
		return p
	}
	return nil
}
package widget

import (
	"github.com/twgh/xcgui/xc"
	"github.com/twgh/xcgui/xcc"
)

// ScrollBar 滚动条.
type ScrollBar struct {
	Element
}

// 滚动条_创建, 创建滚动条元素, 返回元素句柄.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父是窗口资源句柄或UI元素资源句柄. 如果是窗口资源句柄将被添加到窗口, 如果是元素资源句柄将被添加到元素.
func NewScrollBar(x, y, cx, cy int32, hParent int) *ScrollBar {
	p := &ScrollBar{}
	p.SetHandle(xc.XSBar_Create(x, y, cx, cy, hParent))
	return p
}

// 从句柄创建对象.
func NewScrollBarByHandle(handle int) *ScrollBar {
	p := &ScrollBar{}
	p.SetHandle(handle)
	return p
}

// 从name创建对象, 失败返回nil.
func NewScrollBarByName(name string) *ScrollBar {
	handle := xc.XC_GetObjectByName(name)
	if handle > 0 {
		p := &ScrollBar{}
		p.SetHandle(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func NewScrollBarByUID(nUID int32) *ScrollBar {
	handle := xc.XC_GetObjectByUID(nUID)
	if handle > 0 {
		p := &ScrollBar{}
		p.SetHandle(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func NewScrollBarByUIDName(name string) *ScrollBar {
	handle := xc.XC_GetObjectByUIDName(name)
	if handle > 0 {
		p := &ScrollBar{}
		p.SetHandle(handle)
		return p
	}
	return nil
}

// 滚动条_置范围, 设置滚动范围.
//
// range_: 范围.
func (s *ScrollBar) SetRange(range_ int32) *ScrollBar {
	xc.XSBar_SetRange(s.Handle, range_)
	return s
}

// 滚动条_取范围, 获取滚动范围.
func (s *ScrollBar) GetRange() int32 {
	return xc.XSBar_GetRange(s.Handle)
}

// 滚动条_显示上下按钮, 显示隐藏滚动条上下按钮.
//
// bShow: 是否显示.
func (s *ScrollBar) ShowButton(bShow bool) *ScrollBar {
	xc.XSBar_ShowButton(s.Handle, bShow)
	return s
}

// 滚动条_置滑块长度.
//
// length: 长度.
func (s *Scro


/******************************************************************************
 *
 * Copyright (c) 1995-1999 Palm Computing, Inc. or its subsidiaries.
 * All rights reserved.
 *
 * File: Launcher.h
 *
 * Description:
 *	  These are the routines for the launcher.
 *
 * History:
 *		April 27, 1995	Created by Roger Flores
 *
 *****************************************************************************/

#ifndef __LAUNCHER_H__
#define __LAUNCHER_H__

#include <PalmTypes.h>
#include <CoreTraps.h>

#include <DataMgr.h>
#include <Rect.h>
#include <Font.h>
#include <Form.h>
#include <Window.h>

typedef struct {
	FormPtr			form;
   Int16  			numItems; 			// numItems of applications available via the launcher
   Int16				columns;
   Int16				rows;
   Int16				topItem;
   Int8				selection;
	UInt8				reserved;
	MemHandle		appInfoH;			// an array is to be allocated
	TimeFormatType timeFormat;			// Format to display time in
	char				timeString[timeStringLength];
	FormPtr			savedForm;			// the currently active dialog.
} LauncherType;

typedef LauncherType *LauncherPtr;

/************************************************************
 * Launcher procedures
 *************************************************************/
#ifdef __cplusplus
extern "C" {
#endif

void 		SysAppLauncherDialog()
					SYS_TRAP(sysTrapSysAppLauncherDialog);

#ifdef __cplusplus
}
#endif

#endif // __LAUNCHER_H__


 партий",
  "maximumNbCharacters:one": "Максимум: %s символ.",
  "maximumNbCharacters:few": "Максимум: %s символа.",
  "maximumNbCharacters:many": "Максимум: %s символов.",
  "maximumNbCharacters:other": "Максимум: %s символов.",
  "blocks:one": "%s блокировка",
  "blocks:few": "%s блокировки",
  "blocks:many": "%s блокировок",
  "blocks:other": "%s блокировок",
  "nbForumPosts:one": "%s сообщение на форуме",
  "nbForumPosts:few": "%s сообщения на форуме",
  "nbForumPosts:many": "%s сообщений на форуме",
  "nbForumPosts:other": "%s сообщений на форуме",
  "nbPerfTypePlayersThisWeek:one": "%1$s игрок в %2$s на этой неделе.",
  "nbPerfTypePlayersThisWeek:few": "%1$s игрока в %2$s на этой неделе.",
  "nbPerfTypePlayersThisWeek:many": "%1$s игроков в %2$s на этой неделе.",
  "nbPerfTypePlayersThisWeek:other": "%1$s игроков в %2$s на этой неделе.",
  "availableInNbLanguages:one": "Доступно на %s языке!",
  "availableInNbLanguages:few": "Доступно на %s языках!",
  "availableInNbLanguages:many": "Доступно на %s языках!",
  "availableInNbLanguages:other": "Доступно на %s языках!",
  "nbSecondsToPlayTheFirstMove:one": "%s секунда на первый ход",
  "nbSecondsToPlayTheFirstMove:few": "%s секунды на первый ход",
  "nbSecondsToPlayTheFirstMove:many": "%s секунд на первый ход",
  "nbSecondsToPlayTheFirstMove:other": "%s секунд на первый ход",
  "nbSeconds:one": "%s секунда",
  "nbSeconds:few": "%s секунды",
  "nbSeconds:many": "%s секунд",
  "nbSeconds:other": "%s секунд",
  "andSaveNbPremoveLines:one": "и сохранить %s последовательность",
  "andSaveNbPremoveLines:few": "и сохранить %s последовательности",
  "andSaveNbPremoveLines:many": "и сохранить %s последовательностей",
  "andSaveNbPremoveLines:other": "и сохранить %s последовательностей",
  "private": "Частная",
  "myStudies": "Мои студии",
  "studiesIContributeTo": "Студии с моим участием",
  "myPublicStudies": "Мои публичные студии",
  "myPrivateStudies": "Мои частные студии",
  "myFavoriteStudies": "Мои отмеченные студии",
  "whatAreStudies": "Что такое «студии»?",
  "allStudies": "Все студии",


, AdminServiceError> {
        self.shared
            .lock()
            .map_err(|_| AdminServiceError::general_error("Admin shared lock was lock poisoned"))?
            .get_events_since(since_timestamp, event_type)
            .map_err(|err| {
                AdminServiceError::general_error_with_source("Unable to get events", Box::new(err))
            })
    }

    fn clone_boxed(&self) -> Box<dyn AdminCommands> {
        Box::new(self.clone())
    }
}

pub fn admin_service_id(node_id: &str) -> String {
    format!("admin::{}", node_id)
}

fn sha256<T>(message: &T) -> Result<String, Sha256Error>
where
    T: Message,
{
    let bytes = message
        .write_to_bytes()
        .map_err(|err| Sha256Error(Box::new(err)))?;
    hash(MessageDigest::sha256(), &bytes)
        .map(|digest| to_hex(&*digest))
        .map_err(|err| Sha256Error(Box::new(err)))
}

#[cfg(test)]
mod tests {
    use super::*;

    use std::collections::VecDeque;
    use std::sync::mpsc::{channel, Sender};
    use std::time::{Duration, Instant};

    use crate::circuit::{directory::CircuitDirectory, SplinterState};
    use crate::keys::{
        insecure::AllowAllKeyPermissionManager, storage::StorageKeyRegistry, KeyInfo,
    };
    use crate::mesh::Mesh;
    use crate::network::{auth::AuthorizationCallback, Network};
    use crate::protos::{
        admin,
        authorization::{AuthorizationMessage, AuthorizationMessageType, AuthorizedMessage},
        network::{NetworkMessage, NetworkMessageType},
    };
    use crate::service::{error, ServiceNetworkRegistry, ServiceNetworkSender};
    use crate::signing::{
        hash::{HashSigner, HashVerifier},
        Signer,
    };
    use crate::storage::get_storage;
    use crate::transport::{
        ConnectError, Connection, DisconnectError, RecvError, SendError, Transport,
    };

    /// Test that a circuit creation creates the correct connections and sends the appropriate
    /// messages.
    #[test]
    fn test_propose_circuit() {
        let mesh = Mesh::new(4, 16);
        let network = Network::new(mesh.clone(), 0).unwrap();
        let mut transport = MockConnectingTransport::expect_connections(vec![
            Ok(Box::new(MockConnection::new())),
            Ok(Box::new(MockConnection::new())),
        ]);

        let mut storage = get_storage("memory", CircuitDirectory::new).unwrap();

        // set up key registry
        let pub_key = (0u8..33).collect::<Vec<_>>();
        let mut key_registry = StorageKeyRegistry::new("memory".to_string()).unwrap();
        let key_info = KeyInfo::builder(pub_key.clone(), "test_node".to_string()).build();
        key_registry.save_key(key_info).unwrap();

        let circuit_directory = storage.write().clone();
        let state = SplinterState::new("memory".to_string(), circuit_directory);

        let orchestrator_connection = transport
            .connect("inproc://admin-service")
            .expect("failed to create connection");
        let orchestrator = ServiceOrchestrator::new(vec![], orchestrator_connection, 1, 1, 1)
            .expect("failed to create orchestrator");

        let peer_connector = PeerConnector::new(network.clone(), Box::new(transport));
        let mut admin_service = AdminService::new(
            "test-node".into(),
            orchestrator,
            #[cfg(feature = "service-arg-validation")]
            HashMap::new(),
            peer_connector,
            Box::new(MockAuthInquisitor),
            state,
            Box::new(HashVerifier),
            Box::new(key_registry),
            Box::new(AllowAllKeyPermissionManager),
            "m