rxjs / Subject.d.ts ত্রুটি: শ্রেণি 'সাবজেক্ট <টি>' ভুলভাবে বেস ক্লাসটি 'পর্যবেক্ষণযোগ্য <T>' প্রসারিত করে


90

আমি এই টিউটোরিয়াল থেকে নমুনা টেম্পলেট কোডটি বের করেছি এবং শুরু করতে দুটি ধাপের নীচে করেছি -

  1. npm install // worked fine and created node_modules folder with all dependencies
  2. npm start // নীচে ত্রুটি দিয়ে ব্যর্থ হয়েছে-

    node_modules/rxjs/Subject.d.ts(16,22): error TS2415: Class 'Subject<T>' 
      incorrectly extends base class 'Observable<T>'.
      Types of property 'lift' are incompatible.
      Type '<T, R>(operator: Operator<T, R>) => Observable<T>' is not assignable  
      to type '<R>(operator: Operator<T, R>) => Observable<R>'.
      Type 'Observable<T>' is not assignable to type 'Observable<R>'.
      Type 'T' is not assignable to type 'R'.
      npm ERR! code ELIFECYCLE
      npm ERR! errno 2
    

আমি দেখতে পাচ্ছি যে সাবজেক্ট.ডেটস লিফটের ঘোষণা নীচের মতো রয়েছে -

 lift<T, R>(operator: Operator<T, R>): Observable<T>;

এবং অবজার্ভ.বেটস এ এটি নীচের হিসাবে সংজ্ঞায়িত করা হয়েছে-

 lift<R>(operator: Operator<T, R>): Observable<R> {

দ্রষ্টব্য: - 1. আমি Angular2 এ নতুন এবং জিনিসগুলি ধরে রাখার চেষ্টা করছি।

  1. ত্রুটিটি লিফট পদ্ধতির বেমানান সংজ্ঞাগুলির কারণে হতে পারে

  2. আমি এই গিথুব থ্রেড দিয়ে পড়েছি

  3. যদি আমাকে আরএক্সজেএসের কিছু আলাদা সংস্করণ ইনস্টল করতে হয় তবে দয়া করে কীভাবে সঠিক rxjs আনইনস্টল করবেন এবং ইনস্টল করবেন তা বলুন।

Edit1: আমি এখানে সাড়া দেরী একটু হতে পারে কিন্তু আমি এখনও ব্যবহার পরেও একই ভুল পান টাইপ করা বিষয় 2.3.4 বা rxjs 6 আলফা । নীচে আমার প্যাকেজ.জসন,

{
  "name": "angular-quickstart",
  "version": "1.0.0",
  "scripts": {
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\" ",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings"
  },
  "license": "ISC",
  "dependencies": {
    "@angular/common": "2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/forms": "2.0.0",
    "@angular/http": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "@angular/router": "3.0.0",
    "@angular/upgrade": "2.0.0",
    "core-js": "^2.4.1",
    "reflect-metadata": "^0.1.3",
    "rxjs": "6.0.0-alpha.0",
    "systemjs": "0.19.27",
    "zone.js": "^0.6.23",
    "angular2-in-memory-web-api": "0.0.20",
    "bootstrap": "^3.3.6"
  },
  "devDependencies": {
    "concurrently": "^2.2.0",
    "lite-server": "^2.2.2",
    "typescript": "2.3.4",
    "typings": "^1.3.2"
  }
}



এটি rxjs@5.4.2 এ স্থির করা হয়েছে বলে মনে হয় ।

উত্তর:


70

অনুযায়ী এই আপনি 2.3.4 টাইপ করা বিষয় আপডেট প্রয়োজন অথবা 6 আলফা rxjs

আপনার প্রজেক্ট আপডেট টাইপস্ক্রিপ্ট বা rxjs সংস্করণে আপনার প্যাকেজ.জসন ফাইলটিতে যান। উদাহরণ

"typescript": "2.3.4"

কর npm install

আপডেট (06/29/2017): -

মতামত টাইপস্ক্রিপ্ট "2.4.0"কাজ।


6
"typescript": "^2.3.4"২.৪.১ মিলবে এবং ২.৪ হ'ল সংস্করণ যা আরএক্সজেএস-এর সাথে সমস্যাটি প্রকাশ করে।
কার্টেন্ট

4
টাইপস্ক্রিপ্ট সংস্করণ প্রতিস্থাপন "2.4.0" আমার জন্য কাজ করে।
আজাক্স

4
আমি দ্বিতীয় যে এটি ঠিক "2.3.4" হতে হবে - "^ 2.3.4" আমার পক্ষে কাজ করে না।
মিয়া

4
সংমিশ্রণ "typescript": "2.3.0"এবং "rxjs": "5.4.1"আমার জন্য কাজ করেছেন
ericdemo07

@ জোনিসই দুঃখিত, আমি যা বলেছিলাম তা ফিরিয়ে নিই। প্রকল্পটি সংকলিত হয়েছে, তবে আমি একটি রানটাইম ত্রুটি পেয়েছি এবং ২.৩.৪ এ ডাউনগ্রেড হয়েছি। এখানে আরো: stackoverflow.com/a/44556137
Carcamano

25

অন্যরা যেমন উল্লেখ করেছে যে টাইপস্ক্রিপ্ট ২.৪ এ প্রবর্তিত জেনেরিকগুলির কঠোর প্রকারের চেকিংয়ের ফলাফল হিসাবে এই সমস্যাটি এসেছে। এটি একটি আরএক্সজেএস টাইপ সংজ্ঞায় একটি অসঙ্গতি প্রকাশ করেছে এবং ফলস্বরূপ আরএক্সজেএস সংস্করণ 5.4.2 এ স্থির করা হয়েছিল । সুতরাং আদর্শ সমাধানটি কেবল 5.4.2 এ আপগ্রেড করা।

যদি আপনি কোনও কারণে 5.4.2 এ আপগ্রেড করতে না পারেন তবে আপনার নিজের প্রজেক্টের জন্য এটি ঠিক করার জন্য প্রকারের ঘোষণার বৃদ্ধির অ্যালান হাদাদাদের সমাধানটি ব্যবহার করা উচিত। আমি আপনার অ্যাপ্লিকেশন এই স্নিপেট যোগ করুন:

// TODO: Remove this when RxJS releases a stable version with a correct declaration of `Subject`.
import { Operator } from 'rxjs/Operator';
import { Observable } from 'rxjs/Observable';

declare module 'rxjs/Subject' {
  interface Subject<T> {
    lift<R>(operator: Operator<T, R>): Observable<R>;
  }
}

তার সমাধানটি কোনও অন্য পার্শ্ব প্রতিক্রিয়া ছাড়বে না এবং এইভাবে দুর্দান্ত। বিকল্পভাবে প্রস্তাবিত সমাধানগুলিতে আপনার প্রকল্প সেটআপের জন্য আরও বেশি পার্শ্ব-প্রতিক্রিয়া রয়েছে এবং সুতরাং এটি কম আদর্শ:

  • সংকলক পতাকা সহ কঠোর জেনেরিক চেক বন্ধ করুন --noStrictGenericChecks। এটি আপনার নিজের অ্যাপ্লিকেশনের জন্য এটি কম কড়া করে তুলবে, যা আপনি করতে পারেন, তবে এই RxJS উদাহরণে যেমন বেমানান ধরণের সংজ্ঞা দেওয়া যেতে পারে যা ফলস্বরূপ আপনার অ্যাপ্লিকেশনে আরও বাগ প্রবর্তন করতে পারে।
  • পতাকা সহ লাইব্রেরিতে প্রকারগুলি পরীক্ষা করা হচ্ছে না --স্কিপলিবচেকটি সত্য হিসাবে সেট করা আছে। এটি আদর্শও নয় কারণ আপনি কিছু ধরণের ত্রুটির প্রতিবেদন নাও পেতে পারেন।
  • আরএক্সজেএস Al আলফায় আপগ্রেড করা - এই পরিবর্তনটি পরিবর্তিত হয়েছে যা এটি আপনার অ্যাপটিকে খারাপভাবে নথিভুক্ত উপায়ে ভেঙে দিতে পারে, এটি এখনও আলফায় রয়েছে বলে seeing অতিরিক্তভাবে যদি আপনার অন্যান্য অ্যাঙ্গুলার 2+ এর মতো নির্ভরতা থাকে তবে এটি সম্ভবত সমর্থিত বিকল্প নাও হতে পারে, ফ্রেমওয়ার্কটি এখনই বা লাইনটি ভেঙে breaking যা আমি মনে করি এটি সমাধান করা আরও কঠিন সমস্যা।

24

একটি স্বীকৃত ব্যান্ড-সহায়তা পদ্ধতির মাধ্যমে RxJS লোকেরা টাইপস্ক্রিপ্ট ২.৪.১ ব্যবহার করার সময় ত্রুটিটি সম্পর্কে কী করতে চান তা সিদ্ধান্ত না দেওয়া পর্যন্ত আপনার tsconfig.json ফাইলটিতে নিম্নলিখিতগুলি যুক্ত করা হয়:

"compilerOptions": {

    "skipLibCheck": true,

 }

এই জন্য ধন্যবাদ, এটি কাজ করে। আমি প্রচুর অন্যান্য জিনিস চেষ্টা করেছি কিন্তু আমার ধারণা এই ত্রুটিটি ভুল প্যাকেজগুলির সাথে সম্পর্কিত যা ভুল সংস্করণটি একে অপরকে সমর্থন করে না ...
সেলিম

4
আমি মনে করি সমস্ত লিবিচেক অক্ষম করা বা দমন করা ভাল ধারণা নয়।
চরণরুট


@ জনিসাই যেহেতু আপনি সেই কোডটির মালিক নন, আপনি লাইব্রেরিগুলিতে ইস্যু ফাইল করতে পারেন এবং তারপরে আপনার নিজের উন্নয়ন কাজ চালিয়ে যাবেন বলে স্বল্প মেয়াদে লাইব চেকটি দমন করা ভাল। আপনি আপনার নিজের ইস্যু ফাইল করতে পারেন এবং তাদের সমস্যার সাথে লিঙ্ক করতে পারেন এবং যখন তাদের প্রকারগুলি স্থির হয়ে যায় আপনি সুপারিশ বন্ধ করতে পারেন।
সান নেওয়েল

6
বাস্তব সমাধান করা উচিত না হতে skipLibCheck। যদি আপনি এটি করছেন, আপনি অন্যান্য সমস্যার উপর সম্ভাব্যভাবে গ্লাস করছেন। noStrictGenericChecksআরএক্সজেএস আপডেট হওয়া অবধি আরও ভাল সমাধান ।
ড্যানিয়েল রোজনওয়াসার

19

আপনি মডিউল অগমেন্টেশন ব্যবহার করে সাময়িকভাবে সমস্যাটি ঘিরে কাজ করতে পারেন

নিম্নলিখিত কোডটি আমার জন্য সমস্যাটি সমাধান করেছে। একবার আরএক্সজেএসের একটি স্থিতিশীল প্রকাশ হ'ল যা এই সমস্যাটি প্রদর্শন করে না, এটি সরানো উচিত।

// augmentations.ts
import {Operator} from 'rxjs/Operator';
import {Observable} from 'rxjs/Observable';

// TODO: Remove this when a stable release of RxJS without the bug is available.
declare module 'rxjs/Subject' {
  interface Subject<T> {
    lift<R>(operator: Operator<T, R>): Observable<R>;
  }
}

যদিও এটি বিদ্রূপজনক যে RxJS নিজেই নিজের কৌশলটি নিজের আকৃতি বর্ণনা করার জন্য এই কৌশলটির এত বেশি ভারী ব্যবহার করে, এটি সাধারণত সমস্যার অ্যারেটিতে সাধারণত প্রযোজ্য।

অবশ্যই সীমাবদ্ধতা এবং রুক্ষ প্রান্ত রয়েছে, এই কৌশলটি শক্তিশালী করে তোলে তার একটি অংশ হ'ল আমরা এটি সম্পূর্ণ ফাইলটিকে কাঁটাচামক না দিয়ে এবং রক্ষণাবেক্ষণ ব্যতীত আরও প্রকারের নিরাপদ করে তুল্য বিদ্যমান ঘোষণাগুলিকে উন্নত করতে ব্যবহার করতে পারি।


আপনি এই ফাইলটি কোথায় যুক্ত বা আমদানি করবেন?
ডেভ

4
আপনার প্রকল্পে এটি যে কোনও জায়গায় যুক্ত করুন যাতে এটি সংকলকটি গ্রহণ করবে। আপনি যদি সুস্পষ্ট ফাইলের তালিকা ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে এটি অন্তর্ভুক্ত রয়েছে। অন্যথায় এটি যতক্ষণ না tsconfig.json ফাইলের ওপরে না থাকে এটি স্বয়ংক্রিয়ভাবে নেওয়া উচিত
আলুয়ান হাদাদ

4
আমি এটি চেষ্টা করেছি, কারণ এটি করা সবচেয়ে কম বিঘ্নজনক জিনিস বলে মনে হয়েছিল। ভাল কাজ করেছেন।
স্টিফেন হল্ট

4
ফাইলটি কীভাবে যুক্ত করতে হবে তা আমি খুঁজে বের করেছি - "আমদানি 'rxjs / বিষয়';" ("থেকে" বা কোঁকড়া ধনুর্বন্ধনী ছাড়া) app.componal.ts এ।
জন পানকোভিচ

4
@ জারেড হুইপল এটি একটি গুরুতর সমস্যা এবং টাইপচেকিংয়ের চেয়ে আরও অনেক কিছুতে এর জড়িত। আপনি ব্যবহার করতে পারেন "paths"মধ্যে tsconfig.jsonস্পষ্টভাবে যেখানে নির্দিষ্ট করার "rxjs"এবং "rxjs/*"typechecking জন্য সমাধান করা উচিত নয়। তবে একাধিক সংস্করণ থাকার কারণে রানটাইম সমস্যা হতে পারে। এমনকি যদি আপনি instanceofএবং এই জাতীয় পরীক্ষাগুলি ব্যবহার না করেন তবে আপনার ডিপগুলি কম মূলত হতে পারে। করণীয় সর্বোত্তম বিষয় হ'ল ভিডিওগুলার 2 সহ একটি সমস্যা খোলা যা আরএক্সজেএসকে পিয়ার নির্ভরতার উপর পরিবর্তন করার পরামর্শ দেয়।
আলুয়ান হাদাদাদ

9
"dependencies": {
"@angular/animations": "^4.3.1",
"@angular/common": "^4.3.1",
"@angular/compiler": "^4.3.1",
"@angular/compiler-cli": "^4.3.1",
"@angular/core": "^4.3.1",
"@angular/forms": "^4.3.1",
"@angular/http": "^4.3.1",
"@angular/platform-browser": "^4.3.1",
"@angular/platform-browser-dynamic": "^4.3.1",
"@angular/platform-server": "^4.3.1",
"@angular/router": "^4.3.1",
"core-js": "^2.4.1",
"rxjs": "^5.4.2",
"ts-helpers": "^1.1.1",
"zone.js": "^0.7.2"
},
"devDependencies": {
"@angular/compiler-cli": "^2.3.1",
"@types/jasmine": "2.5.38",
"@types/node": "^6.0.42",
"angular-cli": "1.0.0-beta.28.3",
"codelyzer": "~2.0.0-beta.1",
"jasmine-core": "2.5.2",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "~4.0.13",
"ts-node": "1.2.1",
"tslint": "^4.3.0",
"typescript": "^2.3.4",
"typings": "^1.3.2"
}

ইন প্যাকেজ.জসন "rxjs": "^5.4.2", এবং " টাইপসক্রিপ্ট ": "^ 2.3.4", তারপরে এনটিএম ইনস্টল করুন এবং এনজি এটির কাজ করবে।


8

আমার দুটি সেন্ট লাগানোর প্রয়াসে কিছুটা বিশদ বিবরণ।

সমস্যা দেখা দেয় দুটো কারণে যখন আমরা আপগ্রেড টাইপ করা বিষয় সর্বশেষ সংস্করণ, যা এখন দ্বারা ছিল টাইপ করা বিষয় 2.4.1 , [ "হিসাবে আমরা আপগ্রেড ভালোবাসি:)"], এবং যেমন @ উল্লেখ Jonnysai তার উত্তরে এবং লিঙ্ক সেখানে প্রদত্ত নেই সমস্যা এবং এর সমাধানগুলি সম্পর্কিত একটি বিশদ আলোচনা

তো, কাজ আমার জন্য ছিল:
1. আমি ছিল নিঃ ইনস্টল টাইপ করা বিষয় 2.4.1 প্রথম, এ গিয়ে কন্ট্রোল প্যানেল > প্রোগ্রাম এবং বৈশিষ্ট্য ...
2. ইনস্টল করুন, পুনর্বার, টাইপ করা বিষয় 2.4.0 , এবং তারপর নিশ্চিত করুন, ইন package.jsonফাইল, আপনার এই কনফিগারেশনটি রয়েছে, বরং এখানে আরও সংক্ষিপ্ত বিবরণে উল্লেখ করা হয়েছে । আপনি ডাউনলোড করতে পারেন টাইপ করা বিষয় 2.4.0 থেকে এখানে , ভিসুয়াল স্টুডিও 2015 এর জন্য

এখানে চিত্র বর্ণনা লিখুন



এটি কোনও "workaround" ছাড়াই খুব সহজভাবে কাজ করেছে। আমি নিশ্চিত যে এই বিষয়গুলি কিন্তু আমার আরএক্সজেস "5.0.1" ছিল এবং আমি এটি পরিবর্তন করি নি, যদিও সবকিছু ঠিক আছে বলে মনে হচ্ছে। আপনার দুটি সেন্টের জন্য ধন্যবাদ - এটি আমাকে সহায়তা করেছে!
টম এ

টাইপসক্রিপ্ট ২.৩.৪ ব্যবহার করেও আমার এই সমস্যা রয়েছে। সুতরাং এটি সঠিক বলে মনে হচ্ছে না যে সমস্যাটি 2.4.1 এ আপগ্রেড করার কারণে ঘটেছিল। বর্তমান কৌণিক-ক্লিপটি ২.৩.৪ ইনস্টল করে কারণ এটি বলছে যে এর জন্য <২.৪.০ প্রয়োজন।
জন পানকউইচজ

5

আপনি --noStrictGenericChecksটাইপস্ক্রিপ্ট ২.৪-তে এটি পেতে অস্থায়ীভাবে পতাকাটি ব্যবহার করতে পারেন ।

এই --noStrictGenericChecksমাত্র কমান্ড লাইন, বা "noStrictGenericChecks": trueমধ্যে "compilerOptions"মাঠে tsconfig.json

মনে রাখবেন, আরএক্সজেএস 6 এটিকে সংশোধন করবে।

এই একই প্রশ্নটি দেখুন: টাইপস্ক্রিপ্ট ২.৪-তে আমি কীভাবে এই ত্রুটিটি আরএক্সজেএস 5.x এ পেতে পারি?


আপনি কোথায় পতাকা লাগান?
ডেভ

3

নিম্নলিখিত Subject.d.tsফাইলের লাইনটি পরিবর্তন করুন:

lift<R>(operator: Operator<T, R>): Observable<T>;

প্রতি:

lift<R>(operator: Operator<T, R>): Observable<R>;

রিটার্নের ধরণটি সম্ভবত Observable<R>তার চেয়ে বেশি হওয়া উচিতObservable<T>



3

যোগ সত্য: "noStrictGenericChecks" মধ্যে tsconfig.json ফাইল অধীনে "compilerOptions" নোড হিসাবে ইমেজ & বিল্ড আবেদন নীচের দেখানো হয়েছে। এই ত্রুটিটি সমাধানের পরে যুক্ত করার পরে আমি একই ত্রুটির মুখোমুখি হয়েছি। এখানে চিত্র বর্ণনা লিখুন


2

আমি একই সমস্যা পাওয়া গেছে এবং আমি ব্যবহার করে এটি মীমাংসিত "rxjs": "5.4.1" , "টাইপ করা বিষয়": "~ 2.4.0" এবং যোগ "noStrictGenericChecks": TRUE tsconfig.json মধ্যে।


1

আরএক্সজেএস 6 এর এটি স্থির থাকবে তবে অস্থায়ী কর্মক্ষেত্র হিসাবে আপনি noStrictGenericChecksসংকলক বিকল্পটি ব্যবহার করতে পারেন ।

ইন tsconfig.json, এটি রাখুন compilerOptionsএবং এটি সত্য হিসাবে সেট করুন।

{
    "compilerOptions": {
        "noStrictGenericChecks": true
    }
}

কমান্ড লাইনে এটি --noStrictGenericChecks

কেন এটি হচ্ছে:

টাইপস্ক্রিপ্ট ২.৪-এর কঠোরতার পরিবর্তন রয়েছে এবং সাবজেক্টটি সঠিক পর্যবেক্ষণযোগ্যকে তুলছে না। স্বাক্ষরটি আসলেই হওয়া উচিত ছিল

(অপারেটর: অপারেটর) => পর্যবেক্ষণযোগ্য

এটি আরএক্সজেএস 6 এ স্থির করা হবে।


1

প্যাকেজ.জসন ফাইলটিতে যান এবং নীচের কনফিগারেশনটি সংশোধন করুন

...
  "rxjs": "5.4.1",
  "typescript": "~2.4.0"
...

এটা কাজ করবে


0

উপরোক্ত একা ব্যবহার করা নীচের পদ্ধতির সাহায্যে সহায়তা করে নি: আমি কীভাবে এই "সাবজেক্টটি ভুলভাবে পর্যবেক্ষণযোগ্য প্রসারিত করব" টাইপসক্রিপ ২.৪ এবং আরএক্সজে ৫-এ ত্রুটিটি পেতে পারি?

সমস্যাগুলি সমাধান করুন। এটি এখানেও উল্লেখ করা হয়েছে যে সমস্যাটি আরএক্সজেএস 6-এ স্থির করা হয়েছে, সুতরাং এটি একটি অস্থায়ী সমাধানের আরও বেশি কারণ যা আমাকে এই দুর্দান্ত উদাহরণটি সফলভাবে চালাতে সহায়তা করেছে (যা পূর্বে সংকলিত হয়েছিল কিন্তু লোডের সময় ত্রুটিটি দিয়েছে): কৌণিক 4 অ্যাপ্লিকেশন বিকাশ বুটস্ট্র্যাপ 4 এবং টাইপস্ক্রিপ্ট সহ


0

আরএক্সজেএস পুনরায় ইনস্টল করা -> এনটিএম ইনস্টল করুন rxjs @ 6 আরএক্সজেএস-কম্প্যাট @ 6 - সেভ করুন


0

এখন আমাদের আয়নিক-দেশীয় মডিউলটির প্রয়োজন নেই - আমাদের কেবলমাত্র আয়নিক-স্থানীয় / কোর প্রয়োজন। চালান

npm uninstall ionic-native --save

এটি আপনার সমস্যার সমাধান করবে ..



0

Zmag এবং রাহুল শর্মার উত্তর ধন্যবাদ, এটি কার্যকর! @ জাজগ @ রাহুল শর্মা

  "rxjs": "5.4.1",
  "typescript": "~2.4.0"

আমার সমস্যাটি নিম্নরূপ:

typings/globals/core-js/index.d.ts:3:14 - error TS2300: Duplicate identifier

হিসাবে পরিবর্তন করুন।

প্যাকেজ.জসন ফাইলটিতে যান এবং নীচের কনফিগারেশনটি সংশোধন করুন

  "rxjs": "5.4.1",
  "typescript": "~2.4.0"

-3

হ্যাঁ সমস্যাটি টাইপস্ক্রিপ্ট ২.৪.১ নিয়ে ছিল আমি কন্ট্রোল প্যানেল থেকে এটি আনইনস্টল করেছিলাম এবং ভিজুয়াল স্টুডিও 2017 এর ইতিমধ্যে এটি আমার পক্ষে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.